Construir
Parser constrói a AST sem concentrar toda a semântica nas ações do Bison.
FGA0003 — Compiladores 1 · Semana 7 · Aula prática
Parser constrói a AST sem concentrar toda a semântica nas ações do Bison.
Módulo semântico resolve nomes, verifica tipos e anota nós.
Erros semânticos aparecem com linha, causa e contexto.
Casos válidos e inválidos são executados de forma reproduzível.
O que já existe e o que precisa mudar
git pull
cd "semana 07/src"
make clean && make
./run_tests.sh
Corrigir a base e preparar os tipos
Adicionar -Wall -Wextra -g no Makefile.
Usar %option yylineno no lexer.
Inicializar todos os campos da AST.
Adicionar funções de liberação.
Separar construção da AST e validação
ID { Simbolo *s = buscarSimbolo($1); if (!s) yyerror("nao declarado"); }
ID { $$ = ast_criar_identificador($1, yylineno); }
O primeiro erro explica a origem do problema.
Nós dependentes recebem TIPO_ERRO.
Evita mensagens derivadas e enganadoras.
O estudante foca no erro que precisa corrigir.
Gerar saídas úteis para depuração
[SEMÂNTICO] Linha 4: identificador 'total' não declarado. [SEMÂNTICO] Linha 7: 'a' já foi declarado na linha 2.
Análise semântica concluída com 2 erros. Nenhuma geração posterior deve ocorrer se houver erro semântico.
tests/validos/ 01-declaracao.comp1 02-promocao.comp1 03-expressoes.comp1
tests/invalidos/ 01-nao-declarada.comp1 02-redeclaracao.comp1 03-atribuicao-invalida.comp1
Lexer e parser reconhecem os dois tipos.
int + float resulta em float.
float para int gera erro.
Erros são propagados sem cascata.
Nós exibem tipos inferidos e símbolos resolvidos.
Declarações aparecem com tipo, escopo e linha.
Diagnósticos possuem linha e causa.
Casos positivos e negativos estão versionados.
Descrever regras semânticas implementadas.
Explicar como executar validos e invalidos.
git commit -m "Integra análise semântica"
git push
Do programa validado ao código intermediário
Constrói a AST sem concentrar a semântica.
Resolve nomes, tipos e atribuições.
Acumula erros com localização.
README, testes e commit publicados.