Aula 14: Projeto de Linguagens e AST

Objetivos

  • Entender o padrão Visitor.
  • Estruturar a AST para suportar múltiplas passadas.

Conteúdo

A Árvore Sintática Abstrata (AST) é a peça central de qualquer compilador moderno. Uma vez que o parser valida a sintaxe, ele constrói a AST e sai de cena. Todo o resto do trabalho (semântica, otimização, codegen) acontece passeando por essa árvore.

Por que AST e não Parse Tree?

  • Parse Tree (Árvore Concreta): Contém cada detalhe da gramática (“Termo”, “Fator”, parênteses, ponto-e-vírgula). É ruidosa e difícil de navegar.
  • AST: Contém apenas a essência lógica. Um nó Soma tem apenas dois filhos (Esq, Dir). Parênteses viram a estrutura da árvore em si.

O Padrão Visitor

O maior desafio da AST é a extensibilidade. Queremos adiconar novas operações (Checar Tipos, Gerar Código, Printar) sem ter que modificar as dezenas de classes da AST (IfNode, WhileNode, AddNode, etc).

O Design Pattern Visitor resolve isso: 1. As classes da AST têm apenas um método: accept(Visitor v). 2. A lógica fica em classes externas que implementam a interface Visitor. - TypeCheckVisitor - CodeGenerationVisitor - PrettyPrintVisitor

Isso permite modularizar o compilador perfeitamente.

Referências

  • Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
  • Cooper, K., & Torczon, L. (2011). Engineering a Compiler.
Back to top