tradução dirigida por sintaxe pode ser descrita de duas formas: –definições dirigidas por...
TRANSCRIPT
![Page 1: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/1.jpg)
Tradução Dirigida por Sintaxe
• Pode ser descrita de duas formas:– Definições dirigidas por sintaxe: mais abstratas– Esquemas de tradução: especificam ordem de
avaliação
E E1 + T E.code E1.code || T.code || ‘+’
E E1 + T { print ‘+’; }
![Page 2: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/2.jpg)
Tradução Dirigida por Sintaxe
• Conceitualmente, realiza o parsing, constrói parse tree, e atravessa a árvore sob demanda para avaliar as regras semânticas nos nós da parse tree.
• Avaliação das regras semânticas pode ser usada para gerar código, guardar informações na tabela de símbolos, emitir mensagens de erro etc.
![Page 3: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/3.jpg)
Tradução dirigida por sintaxe
parse treegrafo de
dependênciaPrograma
fonte
ordem de avaliação para
regras semânticas
![Page 4: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/4.jpg)
Definições dirigidas por sintaxe
• Generalização de gramática livre de contexto em que cada símbolo da gramática é associado a um conjunto de atributos.
• Dois tipos de atributos: sintetizados e herdados
![Page 5: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/5.jpg)
Tipos de atributos
• Atributos sintetizados: computados a partir dos atributos dos nós-filhos (abaixo do próprio nó).
• Atributos herdados: computados a partir de nós-pais ou nós-irmãos (acima ou ao lado do próprio nó).
![Page 6: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/6.jpg)
Parse tree anotada
• Mostra os valores dos atributos em cada nó.
• O processo de avaliação dos atributos é chamado “anotar” ou “decorar” a parse tree.
![Page 7: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/7.jpg)
Definição dirigida por sintaxe - exemplo
Produção Regra semântica
L E ‘\n’ print (E.val)
E E1 + T E.val = E1.val + T.val
E T E.val = T.val
T T1 * F T.val = T1.val * F.val
T F T.val = F.val
F ( E ) F.val = E.val
F digit F.val = digit.lexval
![Page 8: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/8.jpg)
Exemplo em yacc
…line : expr '\n'{ printf("%d\n", $1); } ;expr : expr '+' term { $$ = $1 + $3; } | term ;term : term '*' factor { $$ = $1 * $3; } | factor ;factor : '(' expr ')' { $$ = $2; } | DIGIT ;…
![Page 9: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/9.jpg)
Em definições dirigidas por sintaxe
• Terminais possuem apenas atributos sintetizados (pelo analisador léxico).
![Page 10: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/10.jpg)
Atributos Sintetizados
• Muito usados na prática.• Uma definição que usa apenas atributos
sintetizados é chamada de S-attributed definition.
• Definições S-attributed podem sempre ser anotadas através da avaliação das regras semânticas em cada nó, atravessando a parse tree bottom-up, a partir das folhas.
![Page 11: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/11.jpg)
Exemplo –parse tree anotada para 3 * 5 + 4 \n
digit.lexval = 3
*
F.val = 4
+
digit.lexval = 5
E.val = 19
T.val = 15
T.val = 4
T.val = 3
F.val = 3
F.val = 5digit.lexval = 4
E.val = 15
![Page 12: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/12.jpg)
Atributos Herdados
• Definidos a partir dos nós-pai e/ou dos nós-irmãos.
• Úteis para especificar dependência do contexto, por exemplo se um identificador aparece à esquerda ou direita de uma atribuição.
• É sempre possível trabalhar apenas com atributos sintetizados.
![Page 13: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/13.jpg)
Atributos herdados - exemplo
Produção Regra semântica
D T L L.inh = T.type
T int T.type = integer
T real T.type = real
L L1 , id L1.inh = L.inh addtype(id.entry, L.inh)
L id addtype(id.entry, L.inh)
![Page 14: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/14.jpg)
Exemplo – atributos herdados
id3
D
L.inh = real
L.inh = real
real
T.type = real
,
id2L.inh = real ,
id1
![Page 15: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/15.jpg)
Grafos de dependência
• Úteis para determinar a ordem de avaliação dos atributos:
1. Gerar grafo de dependência
2. Fazer sort topológico – ordenação dos nós de um grafo acíclico dirigido em que todas as arestas vão de um nó anterior para nós posteriores.
![Page 16: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/16.jpg)
Construção de árvores sintáticas
• A construção de árvores sintáticas como representação intermediária permite separar o processo de tradução do processo de parsing.
![Page 17: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/17.jpg)
Construção de árvores sintáticas
• Uma gramática adequada para parsing pode não ser adequada para refletir a hierarquia natural das construções de uma linguagem. Ex: sequência de statements vs. expressões aninhadas em FORTRAN.
• Alem disso, o método de parsing pode não ser adequado para a construção de uma parse tree.
![Page 18: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/18.jpg)
Árvores sintáticas (abstratas)
• Uma árvore sintática (abstrata) é uma forma condensada de parse tree adequada para representar os construtores de uma linguagem.
• Operadores e palavras chaves (que são terminais) normalmente não aparecem como folhas, e sim associados a um nó.
![Page 19: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/19.jpg)
Árvores sintáticas - exemplo
If-then-else
S2B S1
while
B S1
+
* 4
53
![Page 20: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/20.jpg)
Construindo Árvores Sintáticas
• Semelhante à tradução para notação pós-fixa: criar sub-árvores criando um nó para cada operando e operador.
• Cada nó pode ser representado por um registro com vários campos.
• Operador: um campo identifica o tipo do operador, e os outros campos são apontadores para os nós dos operandos.
• Podem existir campos adicionais para guardar atributos.
![Page 21: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/21.jpg)
Construindo uma árvore sintática para expressões
• Funções auxiliares:
• Node(op,left,right)
• Leaf(id, entry)
• Leaf(num, val)
![Page 22: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/22.jpg)
Construindo uma árvore sintática para expressões - exemplo
• Contruir a árvore para a expressão:a – 4 + c
• p1 = new Leaf(id, entry_a);p2 = new Leaf(num, 4);p3 = new Node(‘-’,p1,p2);p4 = new Leaf(id, entry_c);p5 = new Node(‘+’, p3, p4);
![Page 23: Tradução Dirigida por Sintaxe Pode ser descrita de duas formas: –Definições dirigidas por sintaxe: mais abstratas –Esquemas de tradução: especificam ordem](https://reader034.vdocuments.site/reader034/viewer/2022051111/552fc17d497959413d8f0d7e/html5/thumbnails/23.jpg)
Definição dirigida por sintaxe – construindo uma árvore
Produção Regra semânticaE E1 + T E.node = new Node(‘+’, E1.node,T.node)
E E1 - T E.node = new Node(‘-’, E1.node,T.node)
E T E.node = T.node
T ( E ) T.node = E.node
T id T.node = new Leaf(id,id.entry)
T num T.node = new Leaf(num,num.val)