Revisar
Confirmar que o parser inicial da equipe ainda compila e reconhece entradas válidas.
FGA0003 — Compiladores 1 · Semana 5 · Aula prática
Confirmar que o parser inicial da equipe ainda compila e reconhece entradas válidas.
Diferenciar erros léxicos, sintáticos e de execução.
Adicionar uma produção com o token especial error e um delimitador de sincronização.
Criar testes inválidos e documentar a estratégia no repositório.
Antes de alterar o parser, confirme que a versão anterior ainda compila e executa.
git pullgit statusmake cleanNão implemente recuperação antes de confirmar que o parser atual ainda funciona.
3 + 4 * 2;
Resultado: 11
Garantir que a precedência e a compilação básica continuam funcionando.
Três responsabilidades diferentes que costumam aparecer misturadas no código inicial.
Caractere não reconhecido pelo scanner. Exemplo: @.
Sequência de tokens inválida para a gramática. Exemplo: 3 + ;
Ação semântica problemática. Exemplo: 10 / 0;
Inclua o token especial error em uma produção segura e pequena.
A mensagem deve ajudar a equipe a localizar e reproduzir o erro.
bison -d src/parser.y
flex src/scanner.l
gcc -Wall -Wextra -o parser parser.tab.c lex.yy.c -lfl
./parser < tests/invalidos/multiplos-erros.txt
O objetivo não é evitar todo erro, mas continuar depois de erros esperados.
3 + ;
(3 + 2;
3 + 4));
3 + @ 2;
10 / 0;
3 + 4; 5 + ; 6 * 7; (8 + 2; 9 - 1;
Após recuperar de um erro, o parser deve processar entradas seguintes.
Guarde o arquivo em tests/invalidos e registre a saída no README.
A estratégia precisa fazer sentido para a linguagem escolhida pela equipe.
Explique erros reconhecidos, sincronizadores, exemplos e limitações.
Versione tests/validos e tests/invalidos.
git add . · git commit -m "Adiciona recuperação e testes de erros sintáticos"
git push
Parser compila e entrada válida funciona.
Produção com error e token de sincronização implementada.
Mensagens diferenciam erro léxico, sintático e execução.
Testes e README atualizados no GitHub.
Conclua com recuperação por token de sincronização, mensagens melhores, testes inválidos documentados e commits publicados. Códigos da disciplina: https://github.com/sergioaafreitas/COMP1