Construir
Gerar nós de AST durante as reduções do Bison.
FGA0003 — Compiladores 1 · Semana 6 · Aula prática
Gerar nós de AST durante as reduções do Bison.
Inserir declarações na tabela de símbolos.
Visualizar AST e tabela após processar um programa curto.
Criar base para a análise semântica da próxima sprint.
O que já existe no GitHub
Repositório oficial: https://github.com/sergioaafreitas/COMP1
int a = 10; int b = 20; int soma = a + b * 2;
git pull
cd "semana 06/src"
make clean && make
printf "a + b - 2\n" | ./parser
Melhorar a AST
Usar espaços, i, + ou - como tipo dificulta evolução.
Expressões funcionam, mas declarações e comandos ficam frágeis.
Diagnósticos posteriores ficam menos precisos.
A AST deve ter função de desalocação.
AST_PROGRAMA AST_DECLARACAO AST_NUMERO AST_IDENTIFICADOR
AST_SOMA AST_SUBTRACAO AST_MULTIPLICACAO AST_DIVISAO
ast_criar_numero(valor, linha)
ast_criar_identificador(nome, linha)
ast_criar_operacao(tipo, esq, dir, linha)
ast_criar_declaracao(nome, inicializacao, linha)
ast_imprimir(raiz, nivel) deve mostrar a hierarquia.
Use o nível para gerar uma saída legível.
ast_liberar(raiz) deve percorrer filhos e lista.
Compare a saída com a árvore esperada.
Construir a tabela de símbolos
tabela_buscar(nome, escopo)
tabela_inserir(nome, categoria, tipo, escopo, linha)
tabela_imprimir() para verificar o resultado.
tabela_liberar() antes de encerrar.
Integrar lexer, parser, AST e tabela
cria nó AST_NUMERO.
cria nó AST_IDENTIFICADOR.
combina subárvores esquerda e direita.
insere símbolo e cria nó AST_DECLARACAO.
make clean && make
./parser < tests/01-expressoes.comp1
./parser < tests/02-declaracoes.comp1
./parser < tests/03-precedencia.comp1
AST de números, identificadores e operações, com impressão hierárquica.
Declarações, tabela de símbolos e testes versionados.
Duplicidade, linha de origem, liberação completa e preparação para escopos.
Nós tipados e impressão hierárquica.
Nome, categoria, tipo, escopo e linha.
Bison construindo AST e inserindo símbolos.
-Wall -Wextra, testes, README e commit.
Da representação interna à validação semântica
Ao final da prática, o compilador da equipe deve começar a enxergar por dentro: AST para estrutura e tabela de símbolos para nomes declarados. Repositório: https://github.com/sergioaafreitas/COMP1