Leitura orientada do código
A partir daqui, o objetivo é entender o que cada função faz antes de modificar o protótipo.
FGA0003 - Compiladores 1 | Semana 8 | Aula prática
Ao final da aula, cada equipe deverá ter executado, inspecionado e adaptado o protótipo de geração de TAC.
O código apresentado está no repositório público da disciplina.
A prática está organizada em poucos arquivos para facilitar leitura, compilação e modificação incremental.
git clone https://github.com/sergioaafreitas/COMP1.git cd "COMP1/semana 08/src"
make clean make ./main
A partir daqui, o objetivo é entender o que cada função faz antes de modificar o protótipo.
Cria uma folha numérica com tipo inteiro.
Cria uma folha para identificadores, como x, a, b ou c.
Cria um nó interno com operador e dois filhos.
Percorre a árvore e imprime sua estrutura em formato infixo.
O protótipo atual monta a árvore de x = a + b * c diretamente em C.
Se não há operador, retorna identificador ou constante.
Percorre recursivamente o filho esquerdo.
Percorre recursivamente o filho direito.
Cria uma temporária e imprime a instrução TAC.
A geração de TAC transforma uma expressão hierárquica em uma sequência explícita de instruções.
t0 = b * c t1 = a + t0 t2 = x = t1
t0 = b * c t1 = a + t0 x = t1
Na função gerarTAC(), trate o operador '=' antes da regra geral para operadores binários.
Percorre arquivos em tests/ e chama ./main para cada um.
O main.c atual não lê a entrada-padrão; ele monta uma AST fixa.
Entradas diferentes ainda podem produzir a mesma saída.
Integrar lexer, parser e AST para que cada entrada gere TAC próprio.
y = (a + b) * (c - 2);
t0 = a + b t1 = c - 2 t2 = t0 * t1 y = t2
No projeto da equipe, a AST não deve ser montada manualmente no main.c; ela deve ser construída pelo parser.
Começar com expressões e atribuições simples.
Fazer ações semânticas do Bison criarem nós reais.
Checar tipos, escopos e identificadores antes do TAC.
Percorrer a AST e registrar instruções testáveis.
Comparar entradas pequenas com saídas intermediárias esperadas.
Todo código produzido para a disciplina deve manter cabeçalho institucional.
O primeiro objetivo da geração de TAC não é otimizar, mas tornar a execução do programa explicitamente representável e testável.
Próximo passo: integrar a geração de TAC à AST real produzida pelo parser da equipe.