Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Durante a compilao podemos usar a estrutura sinttica de um programa (uma sentena da linguagem)
para ajudar a produzir a sua traduo para linguagem de mquina. 2
Em uma gramtica possvel ter vrias derivaes equivalentes (usam as mesmas produes MAS em ordem diferente). Para gramticas irrestritas difcil definir quando 2 derivaes so equivalentes MAS
para GLC temos uma representao grfica que representa uma classe de equivalncias chamada rvore de Derivao.
Se um n interior rotulado com A e seus descendentes diretos so rotulados com X1, X2, ..., Xn ento A -> X1X2...Xn uma produo de P.
Uma rvore rotulada ordenada D uma rvore de derivao para uma GLC G(A) = (Vn,Vt,P,A) se (1) (2) A raiz de D rotulada com A Se D1, ...Dk so as subrvores de descendentes diretos da raiz e a raiz de Di rotulada com Xi,
ento A -> X1,...Xk uma produo em P. Di deve ser a rvore de derivao para G(Xi) = (Vn,Vt,P,Xi) se Xi noterminal e Di um n simples rotulado com Xi se Xi terminal.
(3)
Se D1 a nica subrvore da raiz D e a raiz de D1 rotulada com ento A -> uma produo de P. Vrtices interiores so no-terminais e vrtices folhas podem ser no-terminais, terminais ou . Quando fazemos a rvore de derivao de uma sentena, os vrtices folhas so sempre terminais ou . Uma sentena est representada na rvore de derivao fazendose a leitura das folhas (ns sem descendentes) da esquerda para 5 direita.
Exemplos
rvore de derivao para a sentena aabbaa da GLC G = ({S,A},{a,b}, P,S) P = { S-> aAS | a A -> SbA | ba | SS}
S a A S b A a b a S a
Seja G = ({E,T,F}, {+,*,(,),a},P,E) P = { E -> E + T | T T -> T * F | F F -> (E) | a } 1) Quantas derivaes equivalentes da sentena a + a a rvore de derivao abaixo representa? 2) Mostre a derivao mais esq e a mais dir. E E + T T F F a a
8
Seja a gramtica: C -> if b then C else C C -> if b then C C -> s Ela ambga desde que a cadeia If b then if b then s else s Pode ser interpretada como (i) If b then (if b then s else s) Ou (ii) If b then (if b then s) else s A primeira a preferida em LPs
pois utilizam a regra informal case o else com o if mais prximo que remove a ambiguidade
10
Podemos reescrever a gramtica acima com 2 no-terminais C1 e C2: C1 -> if b then C1 | if b then C2 else C1 | s C2 -> if b then C2 else C2 | s O fato que somente C2 precede o else
garante que entre par then-else gerado por qq uma das produes deve aparecer ou um s ou outro else. Assim, (ii) nunca ocorre.
Vamos definir exatamente o significado de ambiguidade: Seja G1 = ({E,T,F,U},(0,1,2,...,9},P,E) P = { E -> E + T | T T -> T * F | F F -> U | (E) U -> 0 | 1 | ... | 9} uma gramtica para expresses aritmticas para inteiros de 0..9. Por que as LP no usam a gramtica G2: P = { E -> E + E | E * E | (E) | F F -> 0 | 1 | ...| 9} que contm um menor nmero de smbolos e produes??? 12
A razo que: (1) G2 ambga e G1 no . (2) Em G2 + e * tem a mesma prioridade de resoluo enquanto que na matemtica eles no tem. Dada a expresso 2 + 3 * 5 Ela interpretada como? (2 + (3 * 5)) = 17 Ou ((2 + 3) * 5) = 25
13
rvores Derivao de 2 + 3 * 5 em G2
E E F 2 + E E * E F 3 F 5 E E + E F 2 F 3
15
E * E F 5
rvore Derivao de 2 + 3 * 5 em G1
E E T F U 2 + T T * F F U 3 U 5
Primeiro resolvemos 3*5 para depois somar com 2. Dizemos que * tem maior prioridade de resoluo, embora + tenha maior precedncia 16 (escopo)
2 causas da ambiguidade
A prioridade no respeitada
Precisamos forar somente uma forma de estruturar o uso de vrios operadores na rvore de derivao
18
Pascal
1) Expresses parentizadas so resolvidas primeiro 2) Not associados a direita 3) * / div mod and associados a esquerda 4) + - or 5) < > <> >= <= = ocorrem uma vez EXP -> ES <> ES | ES (uma vez) ES -> ES + T | T (esq) T -> T * F | F (esq) F -> not F | U (dir) U -> <inteiro> | <real> | (EXP) { as duas ltimas regras geralmente aparecem juntas na gramtica do Pascal}
20
Os nveis de prioridade indicam a quais operadores so permitidos agrupar seus operandos primeiro (resolver primeiro). Not * / div mod and + - or < > <> >= <= = Prioridade
Precedncia
L = {ai bj ck | i,j,k >= 1 e i = j OU j = k} S -> abc | aRbI | YbWc I -> Ic | c R -> ab | aRb Y -> Ya | a W -> bc | bWc O fato de ser inerentemente ambgua que toda gramtica que gera L gera palavras para i=j por um processo diferente do qual usa para gerar as palavras para j=k. impossvel no gerar algumas palavras para 23 as quais i=j=k por ambos os processos.
Exemplo: aabbcc S a R a b b I Ic c Y b Y a a
24
S W c bc
25
Este problema (decidir se uma GLC ambgua) parcialmente decidvel, pois para determinadas gramtica o procedimento pra e diz sim MAS pode rodar indefinidamente para outros casos.
26
27