Gramática
Descreve o que pode existir na linguagem.
FGA0003 — Compiladores 1 · Semana 5 · Aula teórica
Descreve o que pode existir na linguagem.
Decide passo a passo se a entrada cabe na gramática.
Aparece quando nenhuma ação válida resta para o estado atual.
Pode ser construída no momento das reduções.
Pilha, lookahead e estado orientam todas as decisões.
Desloca o próximo token para a pilha.
Substitui o topo da pilha pelo lado esquerdo de uma produção.
Confirma que a entrada pertence à linguagem.
Indica que nenhuma ação válida está disponível.
A simulação mostra que o parser alterna consumo de tokens e reconhecimento de estruturas.
Considere: pilha = $ expr PLUS; entrada = NUM $. Qual é a próxima ação mais provável?
Ambiguidade e decisões incompletas aparecem como conflitos no Bison.
A soma vira subexpressão esquerda da multiplicação.
A multiplicação fica dentro da subexpressão direita da soma.
A gramática não escolhe sozinha qual interpretação é desejada.
Na gramática expr → expr + expr | expr * expr | NUM, qual é o problema com NUM + NUM * NUM?
Duas ferramentas para tornar a decisão do parser mais determinada.
Com %left MINUS, como a expressão 10 - 3 - 2 é interpretada?
Erro sintático surge quando nenhuma ação válida permanece.
Exemplo: pilha = $ expr PLUS; lookahead = SEMICOLON.
Perceber que a entrada não cabe no estado atual.
Explicar o token encontrado, o contexto e a linha.
Encontrar ponto seguro para continuar a análise.
Em uma linguagem na qual comandos terminam com ;, qual é um bom token inicial de sincronização?
O token especial error permite modelar regiões inválidas da entrada.
3 + 4 * 2; → Resultado: 11
5 + ; → erro próximo de ;
6 * 7; → Resultado: 42
Em até 250 caracteres, explique por que recuperar-se de um erro sintático não significa corrigir o programa do usuário.
Toda redução pode carregar uma ação semântica.
O parser decide usando pilha, estado e lookahead.
Deslocar consome; reduzir reconhece.
Conflitos indicam decisões não determinadas pela gramática.
Recuperar encontra ponto seguro para continuar.
Reduções podem construir a AST.
Na prática, vamos transformar esse entendimento em mensagens de erro e recuperação. Depois, cada redução começará a produzir AST e símbolos.