Escolar Documentos
Profissional Documentos
Cultura Documentos
Julho 2006
Sugesto de leitura: Livro do Aho, Sethi,
Ullman (drago)- Sees 5.1-5.5
Traduo dirigida pela sintaxe
uma tcnica que permite realizar
traduo (gerao de cdigo)
concomitantemente com a anlise
sinttica
Aes semnticas so associadas s
regras de produo da gramtica de modo
que, quando uma dada produo
processada, essas aes sejam
executadas
Traduo dirigida pela Sintaxe
A execuo das aes semnticas pode:
gerar cdigo intermedirio
gerar ou interpretar cdigo
armazenar informaes na tabela de
smbolos
checar a semntica dos comandos
Emitir mensagens de erro, etc.
Traduo dirigida pela sintaxe
Para tornar as aes semnticas mais
efetivas, pode-se associar variveis aos
smbolos (terminais e no terminais) da
gramtica
Assim, os smbolos gramaticais passam a
conter atributos (ou parmetros) capazes
de armazenar valores durante o processo
de reconhecimento
Traduo dirigida pela sintaxe
Um atributo qualquer propriedade de
uma construo de linguagem de
programao.
O processo de computar um atributo e
associar o seu valor computado com a
construo da linguagem em questo
recebe o nome de amarrao do
atributo.
Traduo dirigida pela sintaxe
Na traduo dirigida pela sintaxe, os
atributos so diretamente associados aos
smbolos gramaticais da linguagem
Se X for um smbolo gramatical (terminal
ou no terminal), e a for um atributo
associado a X, escrevemos X.a para o
valor de a associado a X.
Traduo dirigida pela sintaxe
Exemplo:
D var id : type { addTAbSimb( id.lexeme, type.tipo}
type id { type.tipo = buscaTS(id.lexeme);
if ( type.tipo no for identificador de tipo)
erro(Tipo indefinido na linha +linha);
}
Toda vez que uma regra de produo
usada no processo de reconhecimento de
uma sentena, os smbolos gramaticais so
alocados junto com seus atributos
Traduo dirigida pela sintaxe
Pensando na rvore de derivao da
sentena sob anlise, como se a cada
n da rvore (smbolo gramatical)
correspondesse a uma instanciao de
um smbolo e seus atributos
como se o n contivesse campos para
armazenar valores correspondentes ao
smbolo
Traduo dirigida pela sintaxe
Lexeme um
atributo do
tomo
if ( !prtID)
erro(Identificador de tipo +atomoIDTipo.lexeme + indefinido);
if (ptrID.categoria != IDTIPO)
erro(Identificador +atomoIDTipo.lexeme + no identificador
de tipo);
t = ptrID.tipo;
}
Exerccio
Quais seriam as aes semnticas para o
comando:
declaracao_de_variaveis ::=
declare lista_de_ID1 : tipo { ; lista_de_IDi : tipo };
n
E.val = 15
E.val = 15
+ T.val = 4
T.val = 15 F.val = 4
* digit.lexval = 4
T.val = 3 F.val = 5
F.val = 3
digit.lexval = 3
Definio dirigida pela sintaxe
rvore gramatical anotada (forma alternativa)
L
n
E val = 15
E (val = 15)
+ T (val = 4)
* digit (lexval = 4)
T(val = 3) F
digit (lexval = 5)
F (val = 3)
digit (lexval = 3)
Definio dirigida pela sintaxe
Considere a gramtica simples a seguir
para nmeros sem sinal
nmero nmero dgito |
dgito
dgito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
L id incluir_tipo(id.entrada, L.in)
Atributos Herdados
int a, B, X
Grafo de Dependncias
Se um atributo b em um n de uma rvore
de derivao depende de um atributo c,
ento a regra semntica de b deve ser
avaliada aps a regra semntica que
define c
As interdependncias entre os atributos
herdados e atributos sintetizados em uma
rvore gramatical denotada por um grafo
dirigido chamado grafo de dependncias
Grafo de Dependncias
float x, y
rvores Sintticas
if B then S1 else S2
B S1 S2
rvores Sintticas para Expresses
- c
- id
a 4
rvore Sinttica id num 4
Estrutura de dados
Grafo Dirigido Acclico (DAG)
DAG = Directed Acyclic Graph
um grafo usado para identificar as
subexpresses comuns em uma
expresso
Tal como uma rvore sinttica, um DAG
possui um n para cada subexpresso da
expresso
A diferena que no DAG um n pode ter
mais de um pai.
Grafo Dirigido Acclico (DAG)
Numa rvore sinttica, sub-expresses
comuns so representadas como sub-
rvores duplicadas
Seja a expresso:
a+a*(bc)+(bc)*d
Sub-expresses comuns
Sub-expresses comuns
Grafo Dirigido Acclico (DAG)
rvore Sinttica para a expresso
a+a*(bc)+(bc)*d
+
+ *
* - d
a
a - b c
b c
rvore Sinttica
Grafo Dirigido Acclico (DAG)
DAG da a expresso
a+a*(bc)+(bc)*d
+
+ *
* d
a
-
b c
E TR
T num {imprimir(num.val)}
R op_aditivo T {imprimir(op_aditivo.lexema)} R
R
Esquemas de Traduo
Com esquemas de traduo podemos
determinar a ordem na qual aes e
avaliaes de atributos acontecem.
Traduo Top-Down
Definies L-Atribudas sero
implementadas durante um analisador
preditivo.
Usaremos esquemas de traduo.
Eliminao de recurso esquerda de
um esquema de traduo
E -> E1 + T { E.val = E1.val + T.val }
E -> E1 T { E.val = E1.val - T.val }
E -> T { E.val = T.val }
T -> ( E ) { T.val = E.val }
T -> num { T.val = num.val }
T.val = 9 R.i = 9
num.val = 2
Avaliao da expresso 9 5 + 2
Esquema de Traduo