Análise Léxica (já implementada em aula anterior):
Entrada: "let x = 10 + 20;"
↓ Scanner/Lexer
Saída: [LET] [IDENT:x] [EQ] [NUMBER:10] [PLUS] [NUMBER:20] [SEMICOLON]
Análise Sintática (nosso foco):
Entrada: [LET] [IDENT:x] [EQ] [NUMBER:10] [PLUS] [NUMBER:20] [SEMICOLON]
↓ Parser
Saída:
letStatement
├─ keyword: let
├─ identifier: x
├─ symbol: =
├─ expression
│ ├─ term: 10
│ ├─ symbol: +
│ └─ term: 20
└─ symbol: ;
Diferença Crucial:
Definição: Um parser (analisador sintático) é um programa que:
Ilustração do Processo Completo:
┌─────────────────────────────────────────────────────────────┐
│ PIPELINE DE COMPILAÇÃO │
└─────────────────────────────────────────────────────────────┘
Código Fonte Análise Léxica Análise Sintática
("let x = 10;") → [LET, IDENT, EQ, ...] → Parse Tree (XML)
↓ ↓ ↓
Strings Tokens Estrutura
(caracteres) (símbolos) (hierarquia)