Compiladores Conjunto Primero, Siguiente y de Predicción
Ejemplo 1: Dada la siguiente gramática definida por sus producciones P: S ::= A B A ::= a A ::= ε ::= ε B ::= b C d C ::= c C ::= ε ::= ε a) ") c) d) e)
Calcul Calcular ar los los conjun conjuntos tos PRIM PRIMR! R! Calcul Calcular ar los conju conjunto ntos s SI#$I% SI#$I%& & Construir Construir la la ta"la ta"la de análisis análisis sintácti sintáctico co para para # A la 'ista 'ista de los resultados resultados anterio anteriores( res( Puede Puede afirmarse afirmarse ue # es **+,)**+,)n caso de ser una # **+,). **+,). pro"ar si las las siguientes siguientes entradas entradas son anali/a anali/adas das correctamen correctamente: te: abd 0 abc
a) 0 b) No Terminales
Primeros
Siguientes
S
{a, b}
{$}
A
{a, 12
{b}
B
{b}
{$}
C
{c, 12
{d}
c) Para construir la ta"la de"emos calcular el conjunto de predicci3n( Regla
Conjunto de Predicción
S ::= A B
{a, b}
A ::= a
{a}
A ::= ε ::= ε
{b}
B ::= b C d
{b}
C ::= c
{c}
C ::= ε ::= ε
{d}
Tabla de Analisis Sintactico a
b
c
d
S
S::= A B
S::= A B
error
error
error
A
A::= a
A::= ε A::= ε
error
error
error
B
error
B ::= b C d
error
error
error
C
error
error
C ::= c
C ::= ε ::= ε
error
d) Puede d) Puede afirmarse ue # es una **+,) porue:
,( %o es una # am"igua 4( %o tiene factores comunes por la i/uierda 5( %o es recursi'a por la i/uierda
e) Para abd Pila de Simbolos
Entrada
!egla o acción
6S
abd
S ::= A B
6BA
abd
A ::= a
6Ba
abd
mparejar +a)
6B
bd
B ::= b C d
6 d C b
bd
mparejar +b)
6 d C
d
C ::= ε
6d
d
mparejar +d)
6
Aceptar
Para abc Pila de Simbolos
Entrada
!egla o acción
6S
abc
S ::= A B
6BA
abc
A ::= a
6Ba
abc
mparejar +a)
6B
bc
B ::= b C d
6 d C b
bc
mparejar +b)
6 d C
c
C ::= c
6dc
c
mparejar +c)
6d
rror +d 78 )
Ejemplo ": Dada la siguiente gramática definida por sus producciones P: ,) S ::= 9A 4) A ::= or 9A 5) A ::= ε ) 9 ::= RB ;) B ::= RB <) B ::= ε ) R ::= > and ?) R ::= # @) R ::= y ,)> ::= $ a) Calcular los conjuntos PRIMR!
") c) d) e)
Calcular los conjuntos SI#$I%& Construir la ta"la de análisis sintáctico para # A la 'ista de los resultados anteriores( Puede afirmarse ue # es **+,)n caso de ser una # **+,). pro"ar si la siguiente entrada es anali/ada correctamente: / and or 0
a) 0 ") No Terminales
S
A
9
B
R
>
Primeros
{z, x, y}
{or,
Por la producción 1 se deriva a Q y por la producción 4 se deriva a , por la produccion ! se deriva de a " y por la prod 1# se deriva de " a z Por las producciones % y & de se deriva a x e y
Por la prod ( se deriva a or Por la prod - ob)ene*os
{z, x, y}
Por la prod 4, el pri*ero de Q es y por las producciones !, 1#, % y & ob)ene*os z, x, y
{z, x, y, }
Por la prod 5 el pri*ero de B es y por las producciones !, 1#, % y & , ob)ene*os z, x, y Por la produccion 6 ob)ene*os
{z, x, y}
{z}
Por las producciones !, 1#, % y & ob)ene*os z, x, y
Por la produccion 1#
Siguientes
{$}
Por re'la ( del al'ori)*o p+ ob)ener el conun)o si'uien)e
{$}
Por la produccion 1, aplicando la re'la 4 del al'ori)*o, el si'uien)e de A es el si'uien)e de S .e la produccion ( no se puede ob)ener el si'uien)e de A dado /ue nos /ueda*os en un bucle in0ni)o
{or, $}
Por la produccion ( el si'uien)e de Q es el pri*ero de A aplicando la re'la - del al'ori)*o2 y de all3 ob)ene*os or .ebido a /ue se encuen)ra en el conun)o pri*ero de A, debe*os )a*bin aplicar la re'la 4 del al'ori)*o, de donde ob)ene*os /ue el si'uien)e de Q es el si'uien)e de A, por )an)o )a*bin a're'a*os $
{or, $}
Por la produccion 4, el si'uien)e de B es el si'uien)e de Q apliacando la re'la 4 del al'ori)*o2, por )an)o ob)ene*os or y $ .e la produccion 5 no se puede ob)ener el si'uien)e de B dado /ue nos /ueda*os en un bucle in0ni)o
{z, x, y, or, $}
Por la produccion 4 aplicando la re'la - del al'ori)*o2, el si'uien)e de es el pri*ero de B, por lo /ue ob)ene*os z, x, y .ebido a /ue se encuen)ra en el conun)o pri*ero de B, debe*os )a*bin aplicar la re'la 4 del al'ori)*o, de donde ob)ene*os /ue el si'uien)e de es el si'uien)e de B, por )an)o )a*bin a're'a*os or, $
{and}
Por la produccion ! aplicando la re'la - del al'ori)*o2, el si'uien)e de " es and Co*o and es un )er*inal, y es)e no 7ene en su conun)o pri*ero a en)onces no 8ace 9al)a aplicar la re'la 4 del al'ori)*o Nota: En caso de que and u!iese sido un no terminal "ero que en su conjunto "rimero no contenga a , tam"oco de!eriamos a"licar la regla # del algoritmo
c) Para construir la ta"la de"emos calcular el conjunto de predicci3n(
Regla
Conjunto de Prediccion
S ::= 9A
Por la produccion 1, Q es)ar3a en el conun)o de prediccion de S, co*o Q es un no )er*inal debe*os buscar cuales son los )er*inales a los /ue deriva Q Por la produccion 4 Q, deriva a y por las producciones !, 1#, % y &, ob)ene*os /ue Q deriva a z, x, y
{z, x, y}
,) A ::= or 9A 4) A ::= ε
Por la produccion ( ob)ene*os /ue or es): en el con .e prediccion de A Por la produccion - ob)ene*os
{or, }
,) 9 ::= RB
,) B ::= RB ") B ::= ε
1) R ::= > and ") R ::= # %) R ::= y
{z, x, y}
Por la produccion 4, es)ar3a en el conun)o de prediccion de Q, co*o es un no )er*inal debe*os buscar cuales son los )er*inales a los /ue deriva Por las producciones !, 1#, % y &, ob)ene*os /ue deriva a z, x, y
{z, x, y, }
Por la produccion 5, es)ar3a en el conun)o de prediccion de B, co*o es un no )er*inal debe*os buscar cuales son los )er*inales a los /ue deriva Por las producciones !, 1#, % y &, ob)ene*os /ue deriva a z, x, y Por la produccion 6 ob)ene*os /ue )a*bin se encuen)ra en el conun)o de prediccion de B
{z, x, y} Por las producciones !, 1#, % y &, ob)ene*os /ue deriva a z, x, y
1) > ::= $
Por la produccion 1# ob)ene*os /ue z se encuen)ra en el con .e prediccion de "
{z}
Tabla de Analisis Sintactico or
and
x
y
z
$
S
error
error
S;;< Q A
S;;< Q A
S;;< Q A
error
A
A;;< or Q A
error
error
error
error
A;;<
Q
error
error
Q;;< B
Q;;< B
Q;;< B
error
B
error
error
B;;< B
B;;< B
B;;< B
B;;<
error
error
;;< x
;;< y
;;< " and
error
"
error
error
error
error
";;< z
error
d) Puede afirmarse ue # es una **+,) porue: ,( %o es una # am"igua 4( %o tiene factores comunes por la i/uierda 5( %o es recursi'a por la i/uierda
e)
Pila de Simbolos
Entrada
!egla o acción
6S
$ and or y #
S ::= 9 A
6A9
$ and or y #
9 ::= R B
6ABR
$ and or y #
R ::= > and
6 A B and >
$ and or y #
> ::= $
6 A B and $
$ and or y #
mparejar +$)
6 A B and
and or y #
mparejar +and)
6AB
or y #
B ::=
6A
or y #
A ::= or 9 A
6 A 9 or
or y #
mparejar +or)
6A9
y#
9 ::= R B
6ABR
y#
R ::= y
6AB0
y#
mparejar +y)
6AB
#
B ::= R B
6ABR
#
R ::= #
6AB
#
mparejar +#)
6AB
B ::=
6A
A ::=
6
Aceptar
Ejemplo %: Dada la siguiente gramática # = %. &. . P2 donde:
,) 4) 5) ) ;) <) ) ?) @) a) ") c) d)
::= AB ::= A ::= >C B ::= &AB B ::= C ::= '>C C ::= > ::= ( ) > ::= id
Calcular los conjuntos PRIMR! 0 SI#$I%& Construir la ta"la de análisis sintáctico para # Anali/ar la cadena id'id&id utili/ando análisis predicti'o no recursi'o Segn los resultados de los apartados anteriores. ra/onar si # es **+,)
a) No Terminales
=
A
B
C
Primeros
{ , id, }
{ , id}
{ >, }
{ , }
Por la produccion 1, el pri*ero de = es A, y co*o A es un no )er*inal debe*os encon)rar los )er*inales a los /ue deriva A .e all3 ob)ene*os /ue por la produccion - A deriva a " y por las producciones % y &, " deriva a % e id Por la produccion (, ob)ene*os )a*bin /ue el pri*ero de = es
Por la produccion - ob)ene*os /ue el pri*ero de A es ", y co*o " es un no )er*inal debe*os encon)rar los )er*inales a los cuales deriva " .e all3 ob)ene*os por las producciones % y &, " deriva a % e id
Por la produccion 4 ob)ene*os /ue el pri*ero de B es ' y por la produccion 5, ob)ene*os )a*bin /ue el pri*ero de B es
Por la produccion 6 ob)ene*os /ue el pri*ero de C es ' y por la produccion !, ob)ene*os )a*bin /ue el pri*ero de C es
Siguientes
{$, 2 }
Por re'la ( del al'ori)*o p+ ob)ener el conun)o si'uien)e Por la produccion % ob)ene*os /ue el si'uien)e de = es &
{> , $, 2 }
Por la produccion 1, aplicando la re'la - del al'ori)*o, ob)ene*os /ue el si'uien)e de A es el pri*ero de B por lo /ue a're'a*os al conun)o si'uien)e a ' no va2 .ebido a /ue se encuen)ra en el conun)o pri*ero de B, en)onces debe*os )a*bin aplicar la re'la 4 del al'ori)*o, por lo /ue )a*bin ob)ene*os /ue el si'uien)e de A es el si'uien)e de B =n)onces calcula*os el si'uien)e de B /ue ser3a $ y & Por la produccion 4 y aplicando la re'la - del al'ori)*o ob)ene*os /ue el si'uien)e de A es el pri*ero de B /ue ya calcula*os an)erior*en)e2 ?ueva*en)e analiza*os si B 7ene en su con pri*ero a y co*o es)o se cu*ple, )a*bin deberia*os aplicar la re'la 4 del al'ori)*o en donde el S@A2 < S@ B2 /ue ya calcula*os an)erior*en)e2
{ $, 2 }
Por la produccion 1, aplicando la re'la 4 del al'ori)*o, el si'uien)e de B es el si'uien)e de = y de alli ob)ene*os $ y & Por la produccion 4 no pode*os calcular el si'uien)e de B ya /ue en)raria*os a un bucle in0ni)o
{ >, $, 2 }
Por la produccion -, aplicando la re'la 4 del al'ori)*o, el si'uien)e de C es el si'uien)e de A y de alli ob)ene*os ', $ y & Por la produccion 6 no pode*os calcular el si'uien)e de C ya /ue en)raria*os a un bucle in0ni)o
"
Por la produccion % ob)ene*os /ue el pri*ero de " es % Por la produccion & ob)ene*os )a*bin /ue el pri*ero de " es id
{ , id}
Por la produccion -, aplicando la re'la - del al'ori)*o, ob)ene*os /ue el si'uien)e de " es el pri*ero de C por lo /ue a're'a*os al conun)o si'uien)e a ( no va2 .ebido a /ue se encuen)ra en el conun)o pri*ero de C, en)onces debe*os )a*bin aplicar la re'la 4 del al'ori)*o, por lo /ue )a*bin ob)ene*os /ue el si'uien)e de " es el si'uien)e de C =n)onces a're'a*os al conun)o si'uien)e >, $ y 2 Por la produccion 6 y aplicando la re'la - del al'ori)*o ob)ene*os /ue el si'uien)e de " es el pri*ero de C /ue ya calcula*os an)erior*en)e2 ?ueva*en)e analiza*os si C 7ene en su con pri*ero a y co*o es)o se cu*ple, )a*bin deberia*os aplicar la re'la 4 del al'ori)*o en donde el S@"2 < S@ C2 /ue ya calcula*os an)erior*en)e2
{ , >, $, 2 }
b) Para construir la ta"la de"emos calcular el conjunto de predicci3n( No terminales
Conjunto de Prediccion
=
Por produccion 1 ob)ene*os /ue A es)ar3a en el conun)o de predicción de = pero por ser un no )er*inal debe*os encon)rar a los )er*inales /ue deriva A, de all3 ob)ene*os por producción - y lue'o % y 2 ob)ene*os % e id Por la producción ( ob)ene*os /ue $ )a*bin per)enece al conun)o de prediccion Por la producción -, ob)ene*os /ue " es)ar3a en el conun)o de predicción de A pero por ser un no )er*inal debe*os encon)rar a los )er*inales /ue deriva ", de all3 ob)ene*os por las producciones % y & a % e id Por produccion 4 ob)ene*os /ue ' se encuen)ra en el conun)o de predicción de B Por la producción 5 ob)ene*os /ue $ )a*bin per)enece al conun)o de prediccion Por produccion 6 ob)ene*os /ue ( se encuen)ra en el conun)o de predicción de C Por la producción ! ob)ene*os /ue $ )a*bin per)enece al conun)o de prediccion Por producción % ob)ene*os % Por producción & ob)ene*os id
{ , id, $ }
A
{ , id }
B
{ >, $ }
C
{ , $ }
"
{ , id }
Tabla de Analisis Sintactico %
&
=
= ;; < A B
error
A
A ;;< " C
error
B
error
error
B ;;< > A B
C
error
error
error
"
" ;;< = 2
error
'
(
id
$
error
error
= ;; < A B
= ;; <
error
error
A ;;< " C
error
error
error C ;;< " C error
error
B ;; <
error
C ;; <
" ;;< id
error
c) Pila de Simbolos
Entrada
!egla o acción
6
id ' id & id
= ;; < A B
6BA
id ' id & id
A ::= >C
6BC>
id ' id & id
> ::= id
6 B C id
id ' id & id
mparejar+id)
6BC
' id & id
C ::= ' > C
6BC>'
' id & id
mparejar+')
6BC>
id & id
> ::= id
6 B C id
id & id
mparejar+id)
6BC
& id
rror
d) Puede afirmarse ue # es una **+,) porue: ,( %o es una # am"igua 4( %o tiene factores comunes por la i/uierda 5( %o es recursi'a por la i/uierda