Você está na página 1de 23

Traduo Dirigida por Sintaxe

Pode ser descrita de duas formas:


Definies dirigidas por sintaxe: mais abstratas Esquemas de traduo: especificam ordem de avaliao

Traduo Dirigida por Sintaxe


Conceitualmente, realiza o parsing, constri parse tree, e atravessa a rvore sob demanda para avaliar as regras semnticas nos ns da parse tree. Avaliao das regras semnticas pode ser usada para gerar cdigo, guardar informaes na tabela de smbolos, emitir mensagens de erro etc.

Traduo dirigida por sintaxe

Programa fonte

parse tree

grafo de dependncia

ordem de avaliao para regras semnticas

Definies dirigidas por sintaxe


Generalizao de gramtica livre de contexto em que cada smbolo da gramtica associado a um conjunto de atributos. Dois tipos de atributos: sintetizados e herdados

Tipos de atributos
Atributos sintetizados: computados a partir dos atributos dos ns-filhos (abaixo do prprio n). Atributos herdados: computados a partir de ns-pais ou ns-irmos (acima ou ao lado do prprio n).

Parse tree anotada


Mostra os valores dos atributos em cada n. O processo de avaliao dos atributos chamado anotar ou decorar a parse tree.

Definio dirigida por sintaxe exemplo


Produo L g E \n E g E1 + T EgT T g T1 * F TgF Fg(E) F g digit Regra semntica print (E.val) E.val = E1.val + T.val E.val = T.val T.val = T1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval

Exemplo em yacc
line
: ; expr : | ; term : | ; factor : | ; expr '\n'{ printf("%d\n", $1); } expr '+' term term { $$ = $1 + $3; }

term '*' factor { $$ = $1 * $3; } factor '(' expr ')' DIGIT { $$ = $2; }

Em definies dirigidas por sintaxe


Terminais possuem apenas atributos sintetizados (pelo analisador lxico).

Atributos Sintetizados
Muito usados na prtica. Uma definio que usa apenas atributos sintetizados chamada de S-attributed definition. Definies S-attributed podem sempre ser anotadas atravs da avaliao das regras semnticas em cada n, atravessando a parse tree bottom-up, a partir das folhas.

Exemplo parse tree anotada para 3 * 5 + 4 n


E.val = 19
E.val = 15

T.val = 15
T.val = 3 F.val = 3 digit.lexval = 3 digit.lexval = 5 F.val = 5 *

T.val = 4 F.val = 4

digit.lexval = 4

Atributos Herdados
Definidos a partir dos ns-pai e/ou dos nsirmos. teis para especificar dependncia do contexto, por exemplo se um identificador aparece esquerda ou direita de uma atribuio. sempre possvel trabalhar apenas com atributos sintetizados.

Atributos herdados - exemplo


Produo DgTL T g int T g real L g L1 , id
L g id

Regra semntica L.in = T.type T.type = integer T.type = real L1.in = L.in addtype(id.entry, L.in) addtype(id.entry, L.in)

Exemplo atributos herdados


D
T.type = real real L.in = real L.in = real id1 , id2 L.in = real , id3

Grafos de dependncia
teis para determinar a ordem de avaliao dos atributos:
1. Gerar grafo de dependncia 2. fazer sort topolgico ordenao dos ns de um grafo acclico dirigido em que todas as arestas vo de um n anterior para ns posteriores.

Construo de rvores sintticas


A construo de rvores sintticas como representao intermediria permite separar o processo de traduo do processo de parsing.

Construo de rvores sintticas


Uma gramtica adequada para parsing pode no ser adequada para refletir a hierarquia natural das construes de uma linguagem. Ex: sequncia de statements vs. expresses aninhadas em FORTRAN. Alem disso, o mtodo de parsing pode no ser adequado para a construo de uma parse tree.

rvores sintticas (abstratas)


Uma rvore sinttica (abstrata) uma forma condensada de parse tree adequada para representar os construtores de uma linguagem. Operadores e palavras chaves (que so terminais) normalmente no aparecem como folhas, e sim associados a um n.

rvores sintticas - exemplo


If-then-else

S1 +

S2

while

*
B S1 3 5

Construindo rvores Sintticas

Semelhante traduo para notao ps-fixa: criar sub-rvores criando um n para cada operando e operador. Cada n pode ser representado por um registro com vrios campos. Operador: um campo identifica o tipo do operador, e os outros campos so apontadores para os ns dos operandos. Podem existir campos adicionais para guardar atributos.

Construindo uma rvore sinttica para expresses


Funes auxiliares: mknode(op,left,right) mkleaf(id, entry) mkleaf(num, val)

Construindo uma rvore sinttica para expresses - exemplo

Contruir a rvore para a expresso: a4*c p1 = mkleaf(id, entry_a); p2 = mkleaf(num, 4); p3 = mknode(-,p1,p2); p4 = mkleaf(id, entry_c); p5 = mknode(+, p3, p4);

Definio dirigida por sintaxe construindo uma rvore


Produo E g E1 + T
EgT Tg(E) T g id T g num

Regra semntica E.nptr = mknode(+, E1.nptr, T.nptr) E.nptr = T.nptr T.nptr = E.nptr T.nptr = mkleaf(id,id.entry) T.nptr = mkleaf(num,num.val)

Você também pode gostar