Está en la página 1de 28

rvores de Derivao para GLC Ambigidade nas GLC Precedncia, Prioridade e Associatividade de operadores

rvores de Derivao para GLC


GLC so as mais importantes para a definio de linguagens de programao e seus compiladores
pois podem especificar a maioria das estruturas sintticas das linguagens de programao.

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

A estrutura sinttica de uma sentena de entrada pode ser determinada


a partir da seqncia de produes usadas para derivar aquela sentena.

Podemos entender o analisador sinttico (parser) de um compilador como


um dispositivo que tenta determinar se existe uma derivao da sentena de entrada de acordo com alguma GLC.

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.

Uma rvore de derivao para uma GLC G = (Vn,Vt,P,S)


uma rvore rotulada ordenada em que cada n rotulado por um smbolo de Vn Vt .

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

Derivaes mais esq ou mais dir

Temos uma derivao mais esquerda (direita)


quando a cada passo no processo de derivao de uma sentena escolhemos a varivel mais esquerda (direita)

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

Ambigidade nas GLC


Um requisito importante de uma LP que ela no seja ambga ou, no mnimo, que qq ambigidade na linguagem seja evidente ou facilmente evitada. O mais famoso caso de ambigidade o else pendente, presente na especificao de muitas LP.
9

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.

(ii) If b then (if b then s) else s


11

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

Como mostrar que uma gramtica ambgua?


Com rvores de derivao. Def1: Uma GLC (G) ambgua se h pelo menos uma cadeia pertencente L(G) com mais de uma rvore de derivao para represent-la. Def2: Existncia de uma sentena com duas ou mais derivaes mais esq (ou mais dir).
14

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

Uma seqncia de operadores idnticos podem se agrupar a partir da esquerda ou da direita.


Precisamos forar somente uma forma de se associar os operadores idnticos
17

Para retirar a ambiguidade:


introduzimos vrias variveis e estratificamos as regras, quando temos operadores com vrias prioridades de resoluo. Para resolver a ambiguidade vinda do uso de vrios operadores idnticos, foramos o uso da recurso para esquerda ou direita.

18

Regras de Precedncia, Prioridade e Associatividade


Ajudam na deciso da interpretao correta de expresses nas LP Def: Um operador associado esquerda se os operandos so agrupados da esq para dir e associado direita se so agrupados da dir para esq. Est relacionada com a posio da recurso nas regras que permitem um operador ser aplicado mais de uma vez. Por conveno a+a+a = (a+a) + a
19

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

Quanto maior a precedncia maior o escopo (abrangncia na rvore de derivao).


21

Linguagens Inerentemente ambguas


simples encontrar um exemplo de GLC ambgua. Na gramtica abaixo para a sentena a temos 2 rvores S -> A | B A -> a B -> a Mas no to simples exibir uma LLC inerentemente ambgua Def : Uma LLC inerentemente ambgua se toda gramtica que a gera ambgua
22

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

Felizmente problemas de ambiguidade inerente no aparecem em LP!

25

GLC e problemas Indecidveis


Teo : indecidvel se uma dada GLC ambgua. No existe um algortmo genrico que dada uma GLC qq sempre retorne a resposta (sim/no) para ela. MAS
em casos particulares ns podemos reconhecer a ambiguidade e remover a mo E podemos utilizar classes mais restritas de GLC que por definio no so ambiguas como as LL(K)

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

Exemplos de produes ambiguas


1. 2. 3. 4. A A A A -> AA -> A A -> A | A -> A | AA

27

Quais Gramticas so ambguas?


(1) S -> bA | aB A -> a | aS | bAA B -> b | bS | aBB (2) A gramtica usada para gerar expresses aritmticas na notao posfix na linguagem APL: S -> SS + | SS - | SS * | x | y ou na notao prefix: S-> +SS | -SS | *SS | x | y (3) A gramtica para gerar parnteses aninhados: S -> (S) | ( ) | SS (4) A gramtica que define os operadores lgicos and e or 28 E -> E or E | E and E | (E) | a

También podría gustarte