Análisis Sintáctico PDF
Análisis Sintáctico PDF
Análisis Sintáctico PDF
tokens
En realidad...
Componente lxico
Analizador Lxico
Analizador Sintctico
rbol sintctico
Tabla de Smbolos
Anlisis Sintctico
Funciones
Comprobar que la secuencia de componentes lxicos cumple las reglas de la gramtica Generar el rbol sintctico Son especificaciones sintcticas y precisas de lenguajes Se puede generar automticamente un analizador El proceso de construccin puede llevar a descubrir ambigedades Imparte estructura al lenguaje de programacin, siendo ms fcil generar cdigo y detectar errores Es ms fcil ampliar y modificar el lenguaje
Descendentes (top-down)
Construyen el rbol de anlisis sintctico desde arriba (raz,
axioma) hasta abajo (hojas, terminales) Analizadores Descendentes Recursivos Analizadores LL(1) con tabla
Ascendentes (bottom-up)
Construyen el rbol de anlisis sintctico desde abajo hacia
Analizador Sintctico
Tanto para el anlisis descendente como para el ascendente:
La entrada se examina de izquierda a derecha, un smbolo cada vez Trabajan con subclases de gramticas LR(k) LL(k) En la prctica solo se utilizan LR(1) y LL(1)
Muchos compiladores se llaman parser-driven debido a que el analizador sintctico es el que llama al lxico Existen herramientas para generar automticamente analizadores sintcticos (YACC, Bison)
Analizador Sintctico
rbol sintctico
Ejemplo: Id.*.Id.+.Id
Expresin
Expresin
Trmino
Expresin
Trmino
Id
Trmino
Id
Id
Poner el axioma como raz del rbol de derivacin Hasta que solo haya smbolos terminales, derivar ms a la izquierda Entrada: Id.*.Id.+.Id Gramtica:
Expresin::=Expresin.*.Trmino | Expresin.+.Trmino | Trmino Trmino ::= Id | Nmero
Ejemplo
Derivacin:
Expresin Expresin.+.Trmino Expresin.*.Trmino.+.Trmino Trmino.*.Trmino.+.Trmino Id.*.Trmino.+.Trmino Id.*.Id.+.Trmino Id.*.Id.+.Id
Secuencia ms larga de smbolos (T y N) en la parte ms izquierda de la entrada que se puede encontrar en la parte derecha de una produccin y tal que todos los smbolos a su derecha son terminales Ejemplo: Si entrada es: Expresin.*.Trmino.+.Id el pivote es: Expresin.*.Trmino Empezar con la cadena de entrada Intentar llegar hasta el axioma, encontrando el pivote y reducindolo con la produccin correspondiente
Algoritmo
1. 2.
Ejemplo
Id.*.Id.+.Id Trmino.*.Id.+.Id Expresin.*.Id.+.Id Expresin.*.Trmino.+.Id Expresin.+.Id Expresin.+.Trmino Expresin
Recursividad izquierda
Eliminacin de la recursividad
Ambigedad
Factorizacin por la izquierda
Ascendentes
Otros
No est asegurado el tener una gramtica predictiva Las gramticas son difciles de leer Para las partes de las gramticas que no son predictivas se pueden utilizar otros analizadores
Se ejecuta un conjunto de procedimientos recursivos para procesar la entrada A cada NO Terminal de una gramtica se le asocia un procedimiento
La secuencia de procedimientos llamados para procesar la entrada define implcitamente un rbol de anlisis sintctico
Procedure B() { if (car= i) { scan(); if (car in [igual, noigual]) scan(); else error(); if (car == i) then scan else error; } elseif (car in [true, false]) scan(); else error(); }
Si es una cadena de smbolos gramaticales, PRIMERO() es el conjunto de terminales que inician las cadenas derivadas de .
Repetir hasta que no se puedan aadir ms terminales o a ningn conjunto PRIMERO Si X T PRIMERO(X) es { X } Si X aadir a PRIMERO(X) Si X N y X Y1Y2...YKY a PRIMERO(X) si a PRIMERO(Yi) y PRIMERO(Y1), PRIMERO(Y2),..., PRIMERO(Yi-1)
Si Y1 deriva a se aade PRIMERO(Y2) Si Y1 no deriva a no se aade ms a PRIMERO(X)
SIGUIENTE(A)={x|(S*A), (AN), (*), (+), (xPRIMERO()-{})} Conjunto de terminales que pueden aparecer inmediatamente a la derecha de A en alguna forma sentencial, si A es el ltimo smbolo entonces se incluye el separador $ SIGUIENTE(S)={$} La regla AB SIGUIENTE(B) = (PRIMERO()-{}) SIGUIENTE(B) La regla AB | =, * ( PRIMERO()) SIGUIENTE(B) = SIGUIENTE(A) SIGUIENTE(B) Repetir hasta que no cambie ningn conjunto SIGUIENTE
Algoritmo
1. 2.
3.
4.
Que debe cumplir una gramtica para que pueda ser reconocida sin retroceso, con solo mirar el siguiente elemento de la entrada, de forma descendente? Si A::= | PRIMERO() PRIMERO() = . para ningn terminal a tanto y derivan a la vez cadenas que comiencen con a No puede ocurrir que * y * Si *, entonces no deriva ninguna cadena que comience con un terminal en SIGUIENTE(A)
Respuesta:
Condicin LL(1)
ser disjunto
Sea A con aT | aPRIMERO(). El analizador sintctico expandir A por cuando el smbolo actual de la entrada sea a
Algoritmo
ForAll (A::= ) do ForAll a PRIMERO() do tabla(A,a)= Si PRIMERO() Entonces ForAll b SIGUIENTE(A) do tabla(A,b)= ForAll AN y cT do If tabla(A,c)= Then tabla(A,c)= error
E E T T F
SALIDA
Los smbolos de la entrada actual a y cima de la pila X determinan la accin del analizador Hay tres posibilidades:
X=a=$, el analizador se detiene y anuncia el xito del anlisis X=a$, el analizador saca X de la pila y mueve el apuntador de la entrada al siguiente smbolo de entrada XN, el programa consulta la entrada M[X,a]
Si M[X,a]=UVW, se sustituye la X de la pila por WVU (U queda
T+ T T F T Id T
Construir un rbol de anlisis sintctico para una cadena de entrada que comienza por las hojas y avanza hacia la raz. Reducir una cadena de entrada w al smbolo inicial de la gramtica (axioma) En cada paso de reduccin se sustituye una subcadena que concuerde con el lado derecho de una produccin por el smbolo del lado izquierdo, se traza una derivacin por la derecha en sentido inverso
Para una pequea clase de gramticas se puede construir con facilidad, a mano, eficientes analizadores sintcticos por desplazamiento y reduccin Gramtica de operadores
No tiene reglas de produccin del tipo A::= No tiene dos no terminales adyacentes A::=BC | A,B,C N
Ejemplo
No es G. de operadores
EEAE | (E) | -E | id A+ | - | * | /
Si es G. de operadores
EE+E | E-E | E*E | E/E | (E) | -E | id
Algoritmo
Sustituir todos los smbolos no terminales por un nico smbolo Insertar $ al principio y al final de la cadena de entrada Insertar las relaciones de precedencia en la cadena de entrada Mientras entrada$S$ hacer Recorrer entrada desde la izquierda hasta encontrar > Buscar a la izquierda, a partir de ese punto, el primer < Reducir el pivote que se encuentra en el medio Reinsertar las relaciones de precedencia, ignorando los no terminales
< Id > + < Id > ) >$ < E + < Id > ) > $ < E + E > ) > $ E = ) > $
Cuando un operador en la cima de su pila es de ms precedencia que el siguiente ledo, entonces arranca la reduccin del pivote, hasta encontrar la relacin de precedencia mayor. Cada operador extrado se aplica a los operandos ms arriba de la pila de operandos
Evaluacin de Expresiones
Algoritmo de evaluacin de expresiones:
pilaOperadores = $; poner $ al final de la entrada; a:= GetToken; repeat if a=$ y cimaOperadores=$ then return if a es Operando then PushOperando (a); a:=GetToken; else if (cimaOperandos <. a) o (cimaOperandos =. a) then PushOperador (a); a: =GetToken; else repeat opAnterior= PopOperador aplicar opAnterior a pilaOperandos until (cimaOperadores <. opAnterior) else Error until true
Gramtica
La gramtica es ambigua pero este tipo de anlisis proporciona una nica derivacin
Entrada Ida+Idb*Idc$ +Idb*Idc$ Idb*Idc$ *Idc$ Idc$ $ $ $ Pila Operadores $ $ $+ $+ $+* $+* $+ $ Pila Operandos Ida Ida Ida, Idb Ida, Idb Ida, Idb, Idc Ida , Idb*Idc Ida+Idb* Idd
Pila Operandos Ida Ida Ida Ida, Idb Ida, Idb Ida, Idb , Idc Ida, Idb , Idc Ida, Idb , Idc, Idd Ida, Idb , Idc*Idd Ida, Idb+Idc*Idd Ida, Idb+Idc*Idd Ida*(Idb+Idc*Idd)
Pila Operadores
$ $ $ $ $ $ $ $ $ $ $ $ $ $ * * * * * * * * + +
Pila Operandos
Ida Ida Ida Ida IdaIdb IdaIdb IdaIdbIdc IdaIdb+Idc IdaIdb+Idc IdaIdb+Idc Ida*(idb+Idc) Ida*(idb+Idc) Ida*(idb+Idc) Idd Ida*(idb+Idc)+Idd
( ( (+ (+ ( ()
1 >2 y 2 > 1 si son asociativos por la izquierda 1 <2 y 2 < 1 si son asociativos por la derecha <(, (<, (=), (< (, )>, >) )>)
Resto:
(<Id, <Id, Id>), Id> $< , $< (, $<Id, >$, Id>$, )>$
correctamente cadenas como: Id*-Id Solucin: Utilizar el analizador lxico para devolver dos componentes lxicos distintos, recordando el componente lxico anterior debe distinguir uno de otro. Ejemplo: Es el menos unario si antes el componente lxico ledo era un operador, un parntesis izquierdo, una coma o un smbolo de asignacin
x < y
x > y
sii existe:
Ejemplo:
Propiedad:
(A::= BaC) P, a T, A, B, C N, , *, a siempre aparece en un nivel superior a los smbolos terminales de Cabecera(C) y ltimo(B) en el rbol de derivacin
(A::= BaC) P, a T, A, B, C N, , *
c Cabecera(C), a < c b ltimo(B), b > a (A::= ab) P, a, b T, a=b , *
Si existe ms de una relacin de precedencia entre dos smbolos terminales, no es una gramtica de precedencia Algoritmo
ForAll (A::= BaC) P do Calcular Cabecera(C) Calcular ltimo(B) Calcular las precedencias usando las reglas 1, 2 y 3 ForAll a Cabecera(S) do $ < a ForAll a ltimo(S) do a > $
Cabecera y ltimo
N E T F Cabecera +, *, (, Id *, (, Id (, Id Precedencias(R2) +, *, ), Id > + *, ), Id > * ltimo +, *, ), Id *, ), Id ), Id Precedencias (R1) + < *, (, Id * < (, Id
Tabla
Regla E::=E+T T::=T*F
La tabla de precedencia se puede simplificar, con el objetivo de ahorrar memoria y aumentar la velocidad de proceso, mediante dos funciones f y g Transforman los smbolos terminales en enteros Tienen que cumplir que a,b T
si a < b, f(a) < g(b) si a = b, f(a) = g(b) si a > b, f(a) > g(b)
Para encontrar la relacin de precedencia entre a y b se realiza una comparacin entre f(a) y g(b) No todas las relaciones de precedencia tienen funciones de precedencia
3.
Crear un grafo dirigido cuyos nodos son los grupos encontrados en el paso 2, los arcos se etiquetan:
si a<b, gb fa si a>b, fa gb Respuesta SI, entonces no existen funciones de precedencia Respuesta NO, entonces f(a) y g(a) son los caminos ms largos que comienzan en fa y ga
4.
Ciclos en el grafo:
fId
f*
f+
f$
No hay ciclos, entonces existen las funciones de precedencia. Como las funciones de $ no tienen arcos entonces f($)=g($)=0 El camino ms largo desde g+ tiene longitud 1, entonces g(+)=1 El camino ms largo desde gId a f* a g* a f+ a f$ por tanto g(id)=5
f g
Id 4 5 + 2 1 * 4 3 $ 0 0
Es difcil de manejar componentes lxicos con dos precedencias distintas, como el signo menos (unario y binario) No se puede tener la seguridad de que el analizador acepta exactamente el lenguaje deseado Slo una pequea clase de gramticas puede analizarse Sencillez Se pueden establecer relaciones de precedencia (* precede a +)
Ventajas
Anlisis Ascendente LR
LR(k): Left-to-right, rightmost derivation, k smbolos de entrada son necesarios para tomar las decisiones de anlisis sintctico
Ventajas
Es el mtodo de anlisis por desplazamiento y reduccin sin
supraconjunto de la clase de gramticas que pueden analizarse con analizadores sintcticos predictivos Detectan los errores sintcticos tan pronto como es posible en un examen de izquierda a derecha de la entrada Se pueden reconocer prcticamente todas las construcciones de los lenguajes de programacin descritos por una gramtica G2
Inconvenientes
La construccin a mano requiere mucho trabajo
Tipos de Anlizadores LR
LR simple (SLR)
Fcil de implementar Menos poderoso, hay algunas gramticas que los otros mtodos pueden analizar y este no puede Es muy costoso de implementar El ms potente Intermedio entre los dos mtodos anteriores
LR cannico
Modelo de un Analizador LR
ENTRADA
Pila
a1 ... a1 ... an $
SALIDA
Accin Ir_a
Modelo de Analizador LR
El programa es el mismo para todos los analizadores LR Xi es un smbolo gramatical y cada si es un smbolo llamado estado Se utiliza el smbolo de estado y el smbolo de la entrada para indexar la tabla y determinar la accin siguiente La tabla de anlisis sintcticos tiene dos partes:
Accin[sm, ai]=
error de sintaxis acepta la entrada, el anlisis sintctico finaliza introduce en la pila el smbolo ai y el estado sm extrae smbolos de la pila, ejecuta la accin semntica correspondiente a una produccin
Ir_a[sm, Xi]= sk
Modelo de Analizador LR
Configuracin de un analizador sintctico LR
Tupla con el contenido de la pila y la entrada que resta por procesar (s0 X1 s1 X2 s2 ... Xm sm, ai ai+1 ... an$) (s0 X1 s1 X2 s2 ... Xm sm ai s, ai+1 ... an$)
(s0 X1 s1 X2 s2 ... Xm-r sm-r A s, ai ai+1 ... an$) donde s=Ir_a[sm-r, A] y r=|| (se extraen r smbolos no terminales y r smbolos de estados de la pila)
Algoritmo de Anlisis LR
apuntar ae al primer smbolo de w$ (s est en la cima y ae apunta al smbolo a) repetir case Accin[s, a] Desplazar s push a push s leer en la entrada Reducir A pop 2*|| smbolos s smbolo en la cima de la pila s= Ir_a[s, A] push A push s Aceptar Error fincaso hasta Aceptar o Error
Ejemplo de Anlisis LR
Gramtica
1. 2. 3. 4. 5. 6. E::= E+T E::= T T::= T*F T::= F F::= (E) F::= Id Tabla de anlisis sintctico
Estado 0 1 2 3 4 5 6 7 8 9 10 11 Accin Id + d5 d6 r2 r4 d5 r6 d5 d5 d6 r1 r3 r5 * ( d4 ) $ ACP r2 r4 8 r6 d4 d4 d7 r3 r5 d11 r1 r1 r3 r3 r5 r5 r6 9 3 10 2 3 Ir_a E T 1 2 F 3
d7 r4 d4 r6
r2 r4
Ejemplo de Anlisis LR
Pila
0 0 0 0 0 0 0 0 0 0 0 0 0 0 Id 5 F3 T2 T2*7 T 2 * 7 Id 5 T 2 * 7 F 10 T2 E1 E1+6 E 1 + 6 Id 5 E1+6F3 E1+6T9 E1
Entrada
Id*Id+Id$ *Id+Id$ *Id+Id$ *Id+Id$ Id+Id$ +Id$ +Id$ +Id$ +Id$ Id$ $ $ $ $
Accin
d5 r6 r4 d7 d5 r6 r3 r2 d6 d5 r6 r4 r1 ACP
derecho El punto indica hasta donde se ha visto la produccin en un momento del anlisis
Ejemplo: La produccin AXYZ tiene cuatro elementos: AXYZ AXYZ AXYZ AXYZ
Estado
Conjunto de tems Dan lugar a los estados del analizador sintctico SLR El conjunto de estados: coleccin cannica LR(0)
Los tems son los estados de un AF que reconoce los prefijos viables Los estados son las agrupaciones de estados, (La minimizacin del AF!)
Gramtica ampliada G Funcin cierre(I) (clausura o cerradura), Item+ Funcin goto(I, X) (ir_a), X(T N) Conjunto cannico LR(0) Aadir S, N= (N S ) | S es el axioma Aadir S S, P= (P S S)
Salida
Gramtica ampliada G de G
J:=I;
repeat do J := J (B ) ; until no pueden aadirse tems a J ; return J end for Ji (A B) J , p (B ) P | (B ) J
Ejemplo:
end
Ejemplo:
C:=cierre(S S);
repeat for I C , X | goto(I, X) , goto(I, X) C do C := C goto(I, X); until no pueden aadirse ms conjuntos de tems a C; return C end
1. 2. 3. 4. 5. 1. 2. 3. 4. 5. 6.
El conjunto cannico define un AFD que reconoce los prefijos viables de G, con I0 estado inicial e Ij j 0 estados finales
I0
I1 I2 I3
B begin tipo A id
I5 I6 I7
end
I8 I9 I10
C cdigo
id
I4
Gramtica aumentada G
Salida
Algoritmo
1. 2.
3. 4.
Construir C={I0, I1, ..., In} LR(0) de G El estado i se construye a partir de Ii, poner las operaciones adecuadas del analizador sintctico Las entradas no definidas son ERROR El estado inicial es el del conjunto con [SS]
Desplazar
Si [Aa] Ii , a T, goto(Ii, a) = Ij accin[i, a] =
desplazar j
Reducir
Si [A] Ii , A S a SIGUIENTE(A),
accin[i, a] = reducir A
Aceptar
Si [SS] Ii accin[i,$] = aceptar
Ir_a
Si goto(Ii, A) = Ij, A N ir_a[i, A] = j
ir_a
cdigo $ end S
1 ACP
id
d4
begin
A
2
B C
d6 r(A tipo) d3 d4 d8 d10 r(A id) r(S AB end) r(B begin C) r(C cdigo) 7
Resumen
El anlisis sintctico LR
El anlisis ascendente sin retroceso ms general Utiliza una pila y una tabla de anlisis Desplazamiento/Reduccin La tabla SLR se obtiene haciendo el conjunto cannico LR(0)
Analizador cannico LR
Motivacin
Tabla SLR tiene info insuficiente y pueden aparecer conflictos desplazamiento/reduccin Si el estado Ii contiene [A->] No es adecuada siempre la reduccin A->a para todos los terminales en Siguiente(A)
Dado prefijo viable con items vlidos en Ii puede ser que no
Ejemplo:
S L=R SR L *R L id RL
Conjunto LR(0)
Ejemplo:
1. 2. 3. 4. 5.
G
S L=R SR L *R L id RL
I4:
L*R R L L *R L id
I5: I6:
L id S L = R R L L *R L id
1. 2. 3. 4. 5. 6.
G
S L=R SR L *R L id RL S S
S S S L =R RL S R
L*R R L S L = R
I1 I2 I3
=
I6 I7
L
I9
I4
id id
I8
I5
accin
accin[2,=]=d6 accin[2,=]=r5
$ est en Siguiente(R) pero no hay ninguna derivacin donde reducir L por R seguido de $ Esta informacin de contexto no se usa en el analizador SLR
N S L R
Siguiente $ $, = $, =
Items en LR(1)
tems: estados de AF que reconoce los
Elementos con ms informacin:
[A12, a] con A12P, aT
Definicin:
rm rm
Estado:
Conjunto de estados: coleccin cannica LR(1) Se aumentan los estados LR(0)
Items en LR(1)
Construccin: vara la funcin cierre(I)
[AB, a]I
rm
[B , b] cierre(I)
J:=I;
repeat for Ji [A B,a] J , p (B ) P , bPrimero(a) |
[B , b] J
Ejemplo:
S S S CC C cC | d
Primero $ C$ $ c, d
end
Ejemplo:
S S S CC C cC | d
Primero () c () d c d
C:=cierre([S S, $]);
repeat for I C , X | goto(I, X) , goto(I, X) C do C := C goto(I, X); until no pueden aadirse ms conjuntos de tems a C; return C end
1. 2. 3. 4. 5. 6.
G
S L=R SR L *R L id RL S S
I5: I6:
I13:
[L *R,$]
I1 I2 I3
= R
I9 I6 I7
* L id L id R *
I10
L
I11 I12
R
I4
id
I8
I13
I5
Gramtica aumentada G
Salida
Algoritmo
1. 2.
3. 4.
Construir C={I0, I1, ..., In} LR(1) de G El estado i se construye a partir de Ii, poner las operaciones adecuadas del analizador sintctico Las entradas no definidas son ERROR El estado inicial es el del conjunto con [SS, $]
Analizador LALR
Motivacin
Utilizado en la prctica al reducir el nmero de estados del analizador cannico LR (mismo nmero que SLR)
Si estado Ii contiene [A-> , ], estado Ij contiene [A-> , b] forma estado unin Iij con [A-> , a/b]
Pueden inducirse conflictos reduccin/reduccin pero nunca desplazamiento/reduccin Algunos errores se manifiestan ms tarde
Analizador LALR
Dos principios del analizador LALR(1)
El ncleo de cualquier estado del AFD LR(1) es un estado del AFD LR(0) Si dos estados de LR(1), (s1, s2) tienen el mismo ncleo
Si goto(x1, X)=t1 t2,| goto(x2,X)=t2 y (t1,t2) mismo
ncleo
Corolario: el nmero de estados del AFD del analizador LALR(1) coincide con el AFD LR(0)
3.
4.
Construir C={I0, I1, ..., In} LR(1) de G Para cada ncleo en el conjunto de items LR(1), buscar todos los conjuntos con ese ncleo y reemplazarlos por su estado unin C={J0, J1, ..., Jm} pasan a ser los nuevos estados. Hacer transiciones. Las acciones se generan igual que en el analizador LR. Si hay conflictos, la gramtica no es LALR(1) La tabla ir_a se forma sobre los conjuntos resultantes de efectuar las uniones de elementos LR(1) con el mismo ncleo
Ejemplo
Unir estados:
I0:
I6:
I7_13:
[L *R,=/$]
estados LALR(1):
[SS,$] [S L=R,$] [S R,$] [L *R,=] [L id,=] [R L,$]
I4_12:
[L * R,=/$] [R L,=/$] [L *R,=/$] [L id, =/$]
I8_10:
[R L,=/$]
I9:
[S L = R,$]
I5_11:
[L id,=/$]
I1 I2 I3
= R
I9 I6 I7
* L id L id R * a I5 a I4 a I8
I4
id
I8
I5
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
S S_emparejada | S_no_emparejada S_emparejada if E then S_emparejada else S_emparejada S_emparejada other S_no_emparejada if E then S S_no_emparejada if E then S_emparejada else S_no_emparejada
Conj. LR(0)
1. 2. 3. 4.
G
S iSeS S iS Sa S S
I4: I5:
I1: I2:
I6:
[S iSeS ]
I3:
[S a ]
I4:
[S iSeS] [S i S]
I1: I2:
I5:
I6:
[S iSeS ]
I3:
[S a ]
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
Versin ambigua:
E:=E+E | E*E | (E) | Id
Dos ventajas:
Deshacer la ambigedad con LR equivale aqu a fijar externamente la tabla de precedencia con analizador de precedencia
1. 2. 3. 4. 5.
G
E E+E EE * E E(E) E Id EE
[E(E )] [EE+ E] [EE * E] [EE+E] [EE+ E] [EE * E] [EE *E ] [EE+ E] [EE* E] [E(E) ]
I3: I4:
I0:
I5:
I1:
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]
ir_a
* (
d2 ACP 6
E
1
G:
1. 2. 3. 4.
E E+E EE * E E(E) E Id
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