Reglas: 1. Calcular las relaciones y . 2. Crear tablas de dos columnas para cada par tal que . 3. Debajo de se colocan los simbolos tal que (últimos de ). 4. Debajo de se colocan los símbolos tal que (primeros de ). 5. La relación se obtiene tomando los , donde está en la segunda columna. 6. La relación se obtiene tomando los , donde esta en la primera columna y en la segunda columna (incluido ), siempre que sea un terminal. EJEMPLO DIAPOSITIVAS: S aSb | A A BC | c B ( C A) S aA aABc( bA bAcC) A Bc B(c Cc Cc) B ( ( ( ( C A ABc( ) ) a S S b A ) B C a A B c ( b A c C ) C c ) ( A B c ( S A B C a b c ( ) S = A > = B <<= <<C > > a = <<<<<b > c > > ( > > ) > >
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Reglas:
1. Calcular las relaciones y
.
2. Crear tablas de dos columnas para cada par tal que
.
3. Debajo de se colocan los simbolos tal que
(últimos de ).
4. Debajo de se colocan los símbolos tal que
(primeros de ).
5. La relación se obtiene tomando los , donde está
en la segunda columna.
6. La relación se obtiene tomando los , donde esta
en la primera columna y en la segunda columna (incluido
), siempre que sea un terminal.
EJEMPLO DIAPOSITIVAS:
S aSb | A
A BC | c
B (
C A)
S aA aABc( bA bAcC)
A Bc B(c Cc Cc)
B ( ( ( (
C A ABc( ) )
a S S b A ) B C
a
A
B
c
(
b
A
c
C
)
C
c
)
( A
B
c
(
S A B C a b c ( )
S =
A > =
B < < = < <
C > >
a = < < < < <
b >
c > >
( > >
) > >
Forma sentencial Frase
prima
Reducció
n para
1 #< a< a< ( >c)bb# ( B
2 #< a< a< B< c >)bb# c A
3 #< a< a< B< A) >bb# A) C
4 #< a< a< BC >bb# BC A
5 #< a< a< A >bb# A S
6 #< a< aSb >b# aSb S
7 #< aSb ># aSb S
8 #S#
1. Determine las relaciones de precedencia simple para las siguientes gramáticas. En
caso de existir conflictos, identificar sus causas y encontrar formas de superarlos.
(a) C a | if b then D else C | if b then C
D a | if b then D else D
Definición: G es una gramática de precedencia simple si:
1. Las relación < ,= , > son disjuntas.
2. G no posee dos reglas de la forma A y B .
Si G es una gramática de precedencia simple entonces G no es
ambigua.
No cumple con la definición de precedencia simple. Existe C a y D a.
(b) S AB) | ()
A (
B aS | b | S
S A( A( ) ) A ( ( ( ( B abS abSA( bS bS)
B ) a S A B ( )
b S )
A (
( a b S A (
S A B a b ( )
S >
A < < = < < <
B =
a = < <
b >
( > > > =
) >
Forma sentencial Frase prima Reducción
para
1 #< ( >a ((b)))# ( A
2 #< A< a< ( >(b)))# ( A
3 #< A< a< A< ( >b)))# ( A
4 #< A< a< A< A< b >)))# b B
5 #< A< a< A< AB) >))# AB) S
6 #< A< a< A< S >))# S B
7 #< A< a< AB) >)# AB) S
8 #< A< aS >)# aS B
9 #< AB) ># AB) S
10 #S#
Reglas:
1. Calcular las relaciones ,
, y y las compuestas
y .
2. Crear tablas de dos columnas para cada secuencia
si ocurre en el lado derecho de alguna regla.
o pueden no existir.
3. En la primera columna se colocan los símbolos tal que
. No es necesario si no existe.
4. En la segunda columna se colocan los símbolos tal que
. No es necesario si no existe.
5. La relación se obtiene tomando lo s , donde esta
en la segunda columna.
6. La relación se obtiene tomando lo s , donde esta en
la primera columna.
3. Para cada una de las siguientes gramáticas muestre las relaciones de precedencia de
operadores:
(a) S ↑A&S | a
A b | b;A
S ↑a ↑aS ↑a ↑a Sa Sa a& &a A b bA b b Ab Ab b; b;
↑ A A & & S ; A
b b
; ↑
a b
a b ; & ↑
a
b = >
; < >
& < <
↑ < =
ARBOL COMUN
Forma sentencial Frase
prima Reducción para
1 #<↑<b=;<b=;<b>&↑b&a# b A
2 #<↑<b=;<b=;A>&↑b&a# b;A A
3 #<↑<b=;A>&↑b&a# b;A A
4 #<↑A&<↑<b>&a# b A
5 #<↑A&<↑A&<a># a S
6 #<↑A&<↑A&S># ↑A&S S
7 #<↑A&S># ↑A&S S
8 #S#
S
↑ A
b ; A
b ; A
b
& S
↑ A
b
& S
a
(b) E E+T | T
T T*F | F
F a | b | (E)
E ET ETFab( + +*ab( T TFab)E + +*ab) T TF TFab( * *ab( F Fab)T * *ab) F F ab(F ab( ab( ab) ab)F ab) ab)
E + + T T * * F ( E )
+ * a b )
* a b (
* a b )
a b (
+ * a b )
+ * a b (
a b + * ( )
a > > >
b > > >
+ < < > < < >
* < < > > < >
( < < < < < =
) > > >
Forma sentencial Frase prima
Reducción para
1 #<a>+b* (a+a+b)+ a* (b)# a F
2 #<F+<b>* (a+a+b)+ a* (b)# b F
3 #<F+F>* (a+a+b)+ a* (b)# F+F E
4 #<F*<(<a>+a+b)+ a* (b)># a F
5 #<F*<(<F+<a>+b)+ a* (b)# a F
6 #<F*<(<F+F>+b)+ a* (b)# F+F E
7 #<F*<(<E+<b>)+a* (b)# b F
8 #<F*<(<E+F>)+a* (b)# F+F E
9 #<F*<(E)>+ a* (b)# (E) F
10 #<F*F>+a* (b)# E*F T
11 #<T+<a>* (b)# a F
12 #<T+F>* (b)# T+F E
13 #<E*<(<b>)# b F
14 #<E*<(F)># (F) F
15 #<E*F># E*F T
16 #T#
(c) S (L) | a
L L,S | S
S (a (aS (a (a )a )aS )a )a L LS LS , (a, S SL , )a,
( L L ) L , , S
( a ,
) a ,
) a ,
( a
a , ( )
a > >
, < > < >
( < < < =
) > >
Forma sentencial
Frase prima
Reducción para
1 #<(<a>, ( (a, a), (a, a)))# a S
2 #<(<S,<(<(<a>,a), (a, a)))# a S
3 #<(<S,<(<(<S,<a>), (a, a)))# a S
4 #<(<S,<(<(<S,S>), (a, a)))# S,S L
5 #<(<S,<(<(L)>, (a, a)))# (L) S
6 #<(<S,<(<S,<(<a>,a)))# a S
7 #<(<S,<(<S,<(<S,<a>)))# a S
8 #<(<S,<(<S,<(<S,S>)))# S,S L
9 #<(<S,<(<S,<(L)>))# (L) S
10 #<(<S,<(<S,S>))# S,S L
11 #<(<S,<(L)>)# (L) S
12 #<(<S,S>)# S,S L
13 #<(L)># (L) S
14 #S#
Árbol con precedencia de operadores
5. ¿Puede ser ambigua una gramática de precedencia de operadores? Justique.
Si puede. El algoritmo de análisis de precedencia de operadores siempre reduce la
frase prima mas a la izquierda de la forma sentencial.
Para gramáticas no ambiguas, esta frase es única.
7. Considere la siguiente gramática G2:
A aA | B
B CdB | C
C cCbCeC | DfC | D
D + | - | +- | -+
(a) Obtenga una tabla con las relaciones precedencia de operadores de G2. A partir
de la tabla, determine si la gramática es una gramática de precedencia de
operadores.
A aB aBCcDA+- a adcf+- AB ABCD+- a adef+- B C CcD+-B d dcf+- BC BCD+- d def+- C cD cD+-C cf cf+- CD CD+- ef ef+- D +- +-D +- +- +- +-D +- +-
a A C d d B C b b C
a d c f + -
e f + -
d c f + -
e f + -
c f + -
S
( L
S
a
, S
( L
S
( L
S
a
, S
a
)
, S
( L
S
a
, S
a
)
)
)
C e e C D f f C c C
e f + -
c f + -
+ -
c f + -
c f + -
a b c d e f + -
a < < < < < <
b < = < < <
c = < = < < <
d < < < < <
e > < > > < < <
f > < > > < < <
+ > > > > =
- > > > > =
(b) Muestre los arboles de derivación de las siguientes cadenas.
i. ac+-bc-b+e-e-
Forma sentencial
Frase prima
Reducción para
1 #<a<c<+=->bc-b+e-e-# +- D
2 #<a<cDb<c<->b+e-e-# - D
3 #<a<cDb<cDb<+>e-e-# + D
4 #<a<cDb<cDbDe<->e-# - D
5 #<a<cDb<cDbDeD>e-# cDbDeD C
6 #<a<cDbDe<-># - D
7 #<a<cDbDeD># cDbDeD C
8 #<aC># aC A
9 #A#
ii. a+d+f++, esta no es una cadena de la gramática, considero: a+d+f+-.
Forma sentencial
Frase prima
Reducción para
1 #<a<+>d+f+-# + D
2 #<a<Dd<+>f+-# + D
3 #<a<Dd<Df<+-># +- D
4 #<a<Dd<DfD># DfD C
5 #<a<DdC># DdC B
6 #<aB># aB A
7 #A#
LR (left-to-right and rightmost derivation)
Cada estado en el autómata LR(0) representa un conjunto de ítems
de la colección canónica-LR(0). Una colección de conjunto de
ítems LR(0) es llamada canonical LR(0).
Antes que nada, una gramática extendida es aquella a la que se
le agrega la regla S’S, donde S’ es el nuevo símbolo inicial y
S era el anterior símbolo inicial, esto se agrega para indicarle
al parser cuando debe parar y aceptar la cadena.
Clausura de conjunto de ítems:
Si I es un conjunto de ítem para la gramática G, entonces
clausura(I) es un conjunto de ítems construido desde I con:
1. Inicialmente, agregar cada ítem I a clausura(I).
2. Si A.B esta en clausura(I) y B es una producción,
entonces agregar el ítem B. a la clausura(I), si no
está. Aplicar hasta que no haya mas ítems para agregar.
Goto:
GOTO(I,X) donde I es un conjunto de ítems y X es un símbolo de
la gramática. GOTO(I,X) está definido para ser la clausura del
conjunto de todos los ítems [A.X] tal que [AX.] está en
I.
Estructura de la tabla del parser LR
La tabla del parser consiste en dos partes: una función de
acción y una función GOTO.
1. La función acción toma como argumento un estado i y un
terminal a ($). El valor de ACCION[i,a]:
(a) Desplazar a j, donde j es un estado. La acción
tomada es poner a en la pila y se mueve a j.
(b) Reducción A. Se reduce y se pone A como cabeza
de la pila.
(c) Aceptar.
(d) Error.
2. Extendemos la función GOTO, definimos un conjunto de
ítems, a estados: si GOTO[Ii,A] = Ij, entonces GOTO también
mapea a estado i y un no terminal A a un estado j.
Construcción la tabla para el parser SLR
1. Construir C = {I0,I1,…,In}, la colección de conjuntos de
ítems LR(0) para G’.
2. El estado i se construye a partir del conjunto Ii. Las
acciones de análisis sintáctico para el estado i se
construyen según:
(a) Si [A.a] Ii y GOTO(Ii,a) = Ij, asignar “shift j”
a acción[i,a], siendo a VT.
(b) Si [A.] Ii, entonces asignar “reducir A” a
acción[i,a], para todo a Seguidores(A).
(c) Si [S’S.] Ii, entonces asignar “aceptar” a
acción[i,$].
3. Las transacciones GOTO para el estado i se construyen,
para todos los A VN utilizando la regla
Si GOTO[Ii,A] = Ij entonces GOTO[i,A] = j.
4. Todas las entradas de la tabla no actualizadas por 2 y 3
son consideradas error.
5. El estado inicial es el construido a partir del conjunto
que contiene a [S’.S].
La tabla construida con el algoritmo anterior es llamada tabla
SLR(1) para G. Un analizador (parser) LR que utiliza la tabla
SLR(1) es llamado analizador SLR(1) y una gramática que tiene un
analizador SLR(1) es considerada una gramática SLR(1).
Usualmente el 1 se omite.
Un analizador LR más poderoso
1. El método canónico-LR o LR, que hace uso de los símbolos
del lookahead. Este utiliza un gran conjunto de ítems,
llamados ítems LR(1).
2. El método lookahead-LR o LALR, que se basa los ítem LR(0),
y tiene menos estados que los típicos analizadores basado
en LR(1).
Ítem canónico-LR(1)
Recordemos que el método SLR, el estado i llama a la reducción
por A si el conjunto de ítems Ii contiene el ítem [A.] y a
es un siguiente(A). En algunas situaciones, sin embargo, cuando
el estado i aparece en el tope de la pila, el prefijo viable
en la pila es tal que A no puede ser seguido por a en ninguna
forma sentencial derecha. Así es, la reducción por A debería
ser invalida en la entrada a.
Es posible cargar más información en el estado que nos permitirá
descartar algunas reducciones inválidas.
La forma general de un ítem ahora es [A.,a], donde A es
una producción y a es un terminal o $. El lookahead no tiene
efecto en un ítem de la forma [A.,a], donde no es , pero
el ítem de la forma [A.,a] requiere una reducción por A
solo si el siguiente símbolo es a. Los a’s siempre serán un
subconjuntos de siguientes(A).
Formalmente, decimos que el ítem LR(1) [A.,a] es valido para
un prefijo viable si hay una derivación S Aw w,
donde:
1. = , y
2. A es el primer símbolo de w, o w es y a es $.
8. Construya la tabla de análisis SLR para la siguiente gramática:
E E+T | T
T TF | F
F F* | a | b
Realice el análisis sintáctico de la cadena “b * a 2 * +b" e indique la derivación