CompiladoresVisão geral
Representações Intermediárias
Uma representação intermediária (RI) é a forma do programa entre o texto-fonte e as instruções da máquina-alvo. As fases de análise a produzem; otimização e geração de código a consomem, sem reler o fonte.
Tabela de nomes, 3AC, AST e grafo de fluxo deste tópico — e o deslocamento no registro de ativação, a otimização no bloco e a seleção de instruções nos seguintes — partem dessa forma e dos atributos que a acompanham.
As páginas se agrupam em quatro blocos. O primeiro anota identificadores: grava tipo e escopo na declaração, completa o endereço quando o quadro fica conhecido, e devolve essa linha no uso.
O segundo empilha uma tabela por bloco. A busca começa no topo e desce até o global; a hash só acelera a consulta dentro de uma camada.
O terceiro lineariza a expressão em um operador por linha, com temporários, ou comprime a derivação na AST.
O quarto parte o 3AC pelos líderes e monta o grafo cujos nós são blocos: entrada, então, senão e junção.
Tabelas de Símbolos devolve tipo, escopo e deslocamento de x. Formas de RI quebra a = (b + c) * d em t₁ := b + c e a := t₁ * d.
Busca do topo ao global, conflito na mesma camada e ocultação em camadas distintas estão em Tabelas de Símbolos. Árvore de derivação com nós E, T, F versus AST com raiz no operador está em Formas de RI.
A hash de uma camada só está em Tabelas de Símbolos. Marcar líderes e ligar então, senão e junção, com a impressão depois dos dois ramos, está em Formas de RI.
Páginas deste tópico
Tabelas de Símbolos
ProBaixa incidência no POSCOMP9 min de leitura · 22ª mais cobrada em Compiladores
Entrada = nome + tipo + escopo + endereço; inserção/busca; escopos aninhados; hash como implementação.
Formas de RI
ProMédia incidência no POSCOMP14 min de leitura · 15ª mais cobrada em Compiladores
3AC x:=y op z e saltos; AST; CFG com bloco básico (líderes, if/else/join).