Está en la página 1de 9

Anlisis con Gramticas Ambiguas

Anlisis Sintctico. Procesadores de Lenguaje I

Uso de gramticas ambiguas


Una gramtica ambigua nunca puede ser LR A veces es til emplear una gramtica ambigua:

Construcciones ms naturales y concisas Aislar casos particulares que puede ser til tenerlos separados

Una gramtica ambigua puede generar lenguaje con reglas para deshacer la ambigedad

Idea similar a las reglas de prioridad en gramticas de operador Las gramticas ambiguas slo deben usarse de forma escasa y controlada, para asegurar qu lenguaje se reconoce

Anlisis Sintctico. Procesadores de Lenguaje I

Ejemplo 1 gramtica ambigua


Sintaxis de condicional (gramtica ambigua):

S if E then S else S S if E then S S other

Versin no Ambigua:

S S_emp | S_no_emp S_emp if E then S_emp else S_emp S_emp other S_no_emp if E then S S_no_emp if E then S_emp else S_no_emp

Anlisis Sintctico. Procesadores de Lenguaje I

Conj. LR(0)

1. 2. 3. 4.

G
S iSeS S iS Sa S S

items LR(0): I0: [S S]


[S iSeS] [S iS] [S a]

I4: I5:

[S iSeS] [S i S] [S iSeS] [S iSeS] [S iS] [S a]

I1: I2:

[S S] [S i SeS] [S i S] [S iSeS] [S iS] [S a]

I6:

[S iSeS ]

I3:

[S a ]

Anlisis Sintctico. Procesadores de Lenguaje I

Acciones analizador SLR(1)


Items LR(0)-acciones SLR (1):
I0:
[S S] [S iSeS] [S iS] [S a] acc(0,i)=d2 acc(0,a)=d3 acc(1,$)=ACP

I4:

[S iSeS] [S i S]

acc(4,e)=d5 acc(4,e)=r2 acc(4,$)=r2

I1: I2:

[S S] [S i SeS] [S i S] [S iSeS] [S iS] [S a]

I5:

[S iSeS] [S iSeS] [S iS] [S a] acc(5,i)=d2 acc(5,i)=d3 acc(6,e)=r1 acc(6,$)=r1 N S Siguiente $,e

acc(2,i)=d2 acc(2,a)=d3 acc(3,$)=r3 acc(3,e)=r3

I6:

[S iSeS ]

I3:

[S a ]

Anlisis Sintctico. Procesadores de Lenguaje I

Tabla SLR sin conflictos


Resolucin conflicto: en estado 4, desplazamiento sobre else (prioridad para if ms anidado)

accin
i
0 1 2 3 4 5 6 d2

ir_a
$ S
1 ACP

a
d3

G:
1. 2. 3.
S iSeS S iS Sa

d2 r3 d5 d2 r1

d3 r3 r2 d3 r1

Anlisis Sintctico. Procesadores de Lenguaje I

Ejemplo 2 gramtica ambigua


Gramtica de expresiones con sumas y productos:
E::=E+T | T T::=T*F | F F::=(E) | Id

Versin ambigua:
E:=E+E | E*E | (E) | Id

Dos ventajas:

Ms intuitiva Analizador ms rpido al evitar reducciones FId, TF

Deshacer la ambigedad con LR equivale aqu a fijar externamente la tabla de precedencia con analizador de precedencia

Anlisis Sintctico. Procesadores de Lenguaje I

[E(E)] Conj. LR(0) I : [E E+ E]


2

1. 2. 3. 4. 5.

G
E E+E EE * E E(E) E Id EE

[EE * E] [E (E)] [E Id]

I6: I7: I8: I9:

[E(E )] [EE+ E] [EE * E] [EE+E] [EE+ E] [EE * E] [EE *E ] [EE+ E] [EE* E] [E(E) ]

I3: I4:

[EId] [EE+E] [EE+ E] [EE * E] [E(E)] [EId]

I0:

[EE] [EE+ E] [EE * E] [E (E)] [E Id] [EE] [EE+ E] [EE* E]

I5:

[EE *E] [EE+ E] [EE * E] [E(E)] [EId]

I1:

Anlisis Sintctico. Procesadores de Lenguaje I

Conj. LR(0)
(

I2:

[E(E)] [EE+ E] [EE * E] [E (E)] [E Id]

( E )

I6:

[E(E )] [EE+ E] [EE * E]

I9:

[E(E) ]

I0:

[EE] [EE+ E] [EE * E] [E (E)] [E Id]

Id Id

I3: I4:

[EId]

[EE+E] [EE+ E] [EE * E] [E(E)] [EId]

E + * + E

I7:

[ EE+E] [EE+ E] [EE * E]

I8:

[EE *E ] [EE+ E] [EE* E]

I1:

[EE] [EE+ E] [EE* E]

I5:

[EE *E] [EE+ E] [EE * E] [E(E)] [EId]

Anlisis Sintctico. Procesadores de Lenguaje I

Conflictos en analizador SLR

1. 2. 3. 4. 5.

G
E E+E EE * E E(E) E Id EE Siguiente $,+,*,)

I7:

[EE+E]

acc(7,$)=r1 acc(7,+)=r1 acc(7,*)=r1 acc(7,))=r1 acc(7,+)=d4 acc(7,*)=d5 acc(8,$)=r2 acc(8,+)=r2 acc(8,*)=r2 acc(8,))=r2 acc(8,+)=d4 acc(8,*)=d5

[EE+ E] [EE * E]

N S

I8:

[EE*E]

[EE+ E] [EE * E]

Anlisis Sintctico. Procesadores de Lenguaje I

Tabla SLR sin conflictos


Resolucin conflictos (desplaz/reduccin) sobre +,* {+,*} asociativos por la izquierda * ms prioridad que + estado I7: acc(7,+)=r1 (+ es asociativo por izda) acc(7,*)=d5 (* mayor prioridad que +) estado I8: acc(8,+)=r2 (* mayor prioridad que +) acc(8,*)=r2 (* es asociativo por izda)

Anlisis Sintctico. Procesadores de Lenguaje I

Tabla SLR sin conflictos


accin
id
0 1 2 3 4 5 6 7 8 9 d3 d4 d3 r4 d3 d3 d4 r1 r2 r3 d5 d5 r2 r3 r4 d2 d2 d9 r1 r2 r3 r1 r2 r3 d5 d2 r4 r4 7 8

ir_a
* (
d2 ACP 6

E
1

G:
1. 2. 3. 4.

E E+E EE * E E(E) E Id

Anlisis Sintctico. Procesadores de Lenguaje I

Ejemplo 3 gramtica ambigua


Gramtica de EQN, editor grfico de ecuaciones:
E::=EsubE supE E::=EsubE E::=EsupE E::={E } E::=c

Gramtica intencionadamente ambigua por doble motivo:

sub y sup tendrn conflictos desp/reduccin: se resuelve con asociatividad (a derecha)


Justificado por simplicidad en la gramtica y eficiencia en el anlisis

La primera produccin entra en conflicto desp/reduccin con la segunda Justificacin de produccin extra porque tiene sentido semntico:
b E sub a sup b representa E a , en lugar de Eab

Anlisis Sintctico. Procesadores de Lenguaje I

Ambigedad
Ventajas ambigedad (Louden)

Gramtica ms sencilla, sin construcciones explcitas para asociatividad y precedencia Tabla ms pequea y analizador ms eficiente

Anlisis Sintctico. Procesadores de Lenguaje I

Jerarquas de gramticas
Gramticas no ambigas Gramticas ambigas

GRAM. G2

Anlisis Sintctico. Procesadores de Lenguaje I

Jerarquas de gramticas. Ejemplo


Un lenguaje no LL(1):

L= { (n )n } U{ (n }
S B B B ) ) ) ( ( ( S A A A

Gramtica: T{ (, ) }, N={S,A,B} ( S:=A|(B) ( A:=(A| ( B:=(B)|

Anlisis Sintctico. Procesadores de Lenguaje I

Jerarquas de gramticas
No confundir lenguajes con gramticas Lenguaje de expresiones aritmticas
T{ (, ), +, *, id }, N={E,T,F} G1: E E+T ET TT*F T F F id F(E) G2: E TE E +TE E T F T T * F T T F id F (E)

G1 es SLR(1), G2 es LL(1) L(G1)=L(G2)

Anlisis Sintctico. Procesadores de Lenguaje I

Jerarquas de gramticas
No confundir lenguajes con gramticas Lenguaje de asignaciones
T{ id, num, = }, N={S, L, R} G3: S L=R SR L *R L id RL R num

G4: S id = E S *E = E SE E*E E id E num

G3 es LR(1), G4 es SLR(1) L(G3)=L(G4)

El diseo de la gramtica no es trivial