Você está na página 1de 4

Agenda da Aula

 Análise Semântica
– Definição Dirigida por Sintaxe
Projeto de Compiladores – Árvore Sintática
Análise Semântica (Teoria) – Esquema de Tradução

João Ferreira  Definição do Projeto


ilostmy.info

Onde Estamos? Análise Semântica


programa-fonte

análise léxica

análise sintática

análise semântica tratamento


gerenciador da de erros
tabela de símbolos
gerador de código intermediário

otimizador de código
Semântica: “Relativo ao significado ou ao
gerador de código sentido das unidades lingüísticas .”
Dicionário Houaiss
programa-destino

Análise Sintática X Semântica Análise Semântica


 Notações para associar regras semânticas às
produções
– Definições dirigidas pela sintaxe
• Especificações de alto nível
• Escondem detalhes de implementação
• Não é preciso especificar a ordem de execução das
traduções

– Esquemas de tradução
• Indicam a ordem na qual as regras semânticas são
avaliadas
• Detalhes de implementação sejam evidenciados

1
Definição Dirigida por Sintaxe Definição Dirigida por Sintaxe: Ex
 É a generalização de uma GLC onde
Produção Regra semântica
cada símbolo possui um conjunto de
L→En print (E.val)
atributos
E → E1 + T E.val = E1.val + T.val
 Atributos E→T E.val = T.val
– Variáveis adicionadas aos símbolos de uma T → T1 * F T.val = T1.val * F.val
gramática. T→F T.val = F.val
– Armazenamento de valores durante o F→(E) F.val = E.val
reconhecimento. F → digit F.val = digit.lexval
– Os nós da árvore sintática passam a conter
campos capaz de armazenar valores.

Árvore Gramatical Anotada Atributos Sintetizado


 3*5+4n  Computado somente a partir dos valores
E.val = 19 dos atributos de seus filhos (abaixo do
próprio nó).
E.val = 15 n

T.val = 15 + T.val = 4  Bastante usados na prática.


F.val = 5
T.val = 3 * F.val = 4
 Uma definição que usa apenas atributos
F.val = 3 sintetizados é chamada de S-attributed.
digit.lexval = 5 digit.lexval = 4
digit.lexval = 3

Definição S-Atribuída Atributos Herdado


 Definições S-attributed podem sempre  Computado a partir dos atributos dos nós
ser anotadas através da avaliação das pais ou irmãos (acima e ao lado do
regras semânticas em cada nó, próprio nó).
atravessando (bottom-up) a árvore
gramatical, a partir das folhas.  Produções com atributos herdados
podem ser reescritas de forma a utilizar
apenas atributos sintetizados

2
Acões Semânticas Gramática de Atributos
 Gerar/Interpretar código  Definição dirigida pela sintaxe onde as
funções nas regras semânticas não
 Armazenar informação na tabela de possuem efeito colateral
símbolos
 Efeito colateral
 Emitir mensagens de erro – Imprimir valores
– Atualizar um atributo global

 A ação é executada quando a produção


é reconhecida.

Árvores Sintáticas Árvores Sintáticas


 Árvores sintáticas são uma forma de  Exemplo (S -> if B then S1 else S2)
separar a tradução e a análise sintática.
if then else Operadores e palavras-chave:
 não figuram como folha
 associados ao nó interior (pai)
 Uma árvore sintática (abstrata) é a B S1 S2
condensação da árvore gramatical.
+

* 4

3 5

Construção de Árvores Sintáticas Construção de Árvores Sintáticas


 Semelhante à tradução para notação pós-fixa: criar  Funções auxiliares:
sub-árvores criando um nó para cada operando e
operador. – mknode(op,left,right)

 Cada nó pode ser representado por um registro com – mkleaf(id, entry)


vários campos.

 Operador: um campo identifica o tipo do operador, e – mkleaf(num, val)


os outros campos são apontadores para os nós dos
operandos.

 Podem existir campos adicionais para guardar


atributos.

3
Construção de Árvores Sintáticas DDS para Construir Árvores Sintáticas
 Exemplo: Contruir a árvore para a expressão a – 4 + c
Produção Regra semântica
1. p1 = mkleaf(id, entry_a);
E → E1 + T E.nptr = mknode(‘+’, E1.nptr,
2. p2 = mkleaf(num, 4); + T.nptr)
E→T E.nptr = T.nptr
3. p3 = mknode(‘-’,p1,p2);
T→(E) T.nptr = E.nptr
4. p4 = mkleaf(id, entry_c); - id ↑C T → id T.nptr = mkleaf(id,id.entry)
T → num T.nptr = mkleaf(num,num.val)
5. p5 = mknode(‘+’, p3, p4);
num 4
id ↑a

Esquemas de Tradução Esquema de Tradução (Exemplo)


E→TR
 GLC onde: E → op T {print(op.lexema)} R1 | ε
– Atributos são associados aos símbolos T → num {print(num.val)}
E
gramaticais

T R
– Ações semânticas são envolvidas entre { } e
inseridas no lado direito das produções
9 {print(9)} R
- T {print(-)}

 Entrada: 9 – 5 + 2 5 {print(5)}
+ T {print(+)} R
 Saída: 95-2+
2 {print(2)} ε

Resumo PPT != Material de Estudo


 Análise Semântica – Livro “UFRGS” (Capítulo 4)
– Definição Dirigida por Sintaxe – Livro do “Dragão” (Capítulo 5)
– Árvore Sintática – Livro do “Tigre” (Capítulos 4 e 5)
– Esquema de Tradução

joaoferreira@fir.br
ilostmy.info

Você também pode gostar