Ler
Identificar terminais, não terminais e produções.
Da sequência de tokens à regra Bison e à árvore sintática
O diagnóstico apontou lacunas em gramáticas livres de contexto e análise sintática. A meta é criar uma ponte curta entre gramática formal e parser Bison.
Identificar terminais, não terminais e produções.
Mostrar como uma cadeia de tokens pode ser gerada.
Converter uma produção simples para Bison.
Explicar precedência, associatividade e erros sintáticos.
Ele recebe tokens produzidos pela etapa léxica.
Depois do scanner, a entrada já foi categorizada. O parser verifica se a sequência de tokens obedece à gramática.
Lê caracteres, reconhece lexemas e devolve tokens.
Lê tokens e verifica combinações válidas segundo produções.
Para a entrada x = 3 + 4, qual sequência o parser deve receber?
Uma GLC descreve como construções válidas podem ser formadas.
Não terminais: categorias sintáticas abstratas.
Terminais: tokens que aparecem na entrada.
Produções: regras de formação.
Símbolo inicial: ponto de partida da derivação.
O Bison não elimina a gramática formal; ele a torna executável.
Vem do scanner: NUM, ID, PLUS, LPAREN.
Organiza estruturas: expr, term, factor, stmt.
Define como um não terminal pode ser reescrito.
Na regra expr: expr PLUS term | term ; qual símbolo é terminal?
Derivar é mostrar como a gramática gera uma cadeia.
Uma derivação registra os passos de reescrita até chegar apenas a terminais.
Sequência linear de reescritas.
Estrutura hierárquica que organiza a mesma construção.
Se expr ⇒ expr PLUS term e o primeiro expr vira NUM, qual forma surge?
A regra Bison explicita a gramática e associa ações semânticas.
Não terminal à esquerda: expr.
Formas possíveis à direita, separadas por |.
Código em C executado quando a produção reduz.
$$, $1, $2 representam valores dos símbolos.
expr → expr PLUS expr
{ $$ = $1 + $3; }
Em expr PLUS expr { $$ = $1 + $3; }, o que $3 representa?
Uma gramática pode permitir mais de uma leitura estrutural.
Sem critério adicional, uma expressão pode ter leituras diferentes. O parser precisa de uma decisão formal.
A mesma cadeia admite mais de uma árvore sintática.
O parser não sabe se desloca o próximo token ou reduz agora.
Define qual operador agrupa primeiro.
Resolve empates entre operadores de mesma precedência.
Com precedência usual, como 3 + 4 * 2 deve ser agrupado?
Um parser robusto não precisa parar no primeiro erro.
Isso pertence à análise léxica.
Os tokens existem, mas a sequência viola a gramática.
Descarta ou sincroniza tokens para continuar analisando.
A entrada 3++2; tende a produzir que tipo de erro?
Execute o parser da semana 04.
Use entradas válidas e inválidas.
Para cada erro, diga se é léxico ou sintático.
Acrescente uma produção e justifique a mudança.
Dada uma regra Bison, identifico terminais e não terminais.
Mostro como uma cadeia simples é gerada.
Explico precedência, associatividade e recuperação de erro.
O parser não é uma caixa-preta: ele executa uma gramática. Entender a gramática torna o Bison compreensível.
Use este módulo antes da prática de Bison. Ao abrir parser.y, explique cada produção antes de modificar o código.