Lista oficial pré-P1 — com gabarito comentado
Os quatro blocos abaixo vêm da folha fornecida pelo professor. Tente resolver sem abrir o gabarito.
1. Complete as lacunas
O front end começa pela análise léxica, que lê a entrada e produz ________. A análise sintática obedece à gramática e produz uma ________. Em seguida fazemos a análise ________, incluindo a verificação de variáveis.
Gabarito
2. Resultado da análise léxica
4+92+8+1.0+15+-5$(3+2)*2
Gabarito comentado
a) INT MAIS INT.
b) INT MAIS INT MAIS FLOAT MAIS INT.
c) INT MAIS MENOS. Não há erro léxico: os três tokens são reconhecidos. O problema aparecerá na análise sintática.
d) INT e então erro léxico em $, pois o caractere não pertence aos tokens definidos.
e) PAREN_ESQ INT MAIS INT PAREN_DIR VEZES INT.
3. AST dos itens (a), (b) e (e); por que (c) e (d) não produzem árvore?
Gabarito comentado
(a) 4+9: raiz +, folhas 4 e 9.
(b) 2+8+1.0+1: pela recursão à esquerda da gramática, a estrutura é associativa à esquerda: (((2+8)+1.0)+1). Cada + é nó interno.
(e) (3+2)*2: raiz *; filho esquerdo é a subárvore 3+2; filho direito é 2.
(c) 5+-: o lexer produz tokens, mas a sequência não pode ser derivada pela gramática porque faltam operandos. É erro sintático; portanto o parser não conclui a AST.
(d) 5$: falha antes, no lexer, pois $ não é token válido. Sem sequência lexical completa, não há AST.
4. Tabela de símbolos após cada linha
Gabarito passo a passo
1) x=12 → ST={x:12}
2) y=4 → ST={x:12, y:4}
3) x=x-y=12-4=8 → ST={x:8, y:4}
4) y=3+x=11 → ST={x:8, y:11}
5) z não existe. Ocorre erro semântico e a atribuição não deve atualizar x. ST permanece {x:8, y:11}.
