Universidad Rey Juan Carlos Curso 2010–2011 Teor´ıa de Aut´ omatas y Lenguajes Formales

Anuncio
Universidad Rey Juan Carlos
Curso 2010–2011
Teorı́a de Autómatas y Lenguajes Formales
Ingenierı́a Técnica en Informática de Sistemas
Hoja de Problemas 10
Gramaticas Independientes del Contexto
Nivel del ejercicio : (⋆) básico, (♣) medio, (♠) avanzado.
1. Para cada una de las gramáticas definidas en los siguientes apartados, obtén una
gramática independiente del contexto equivalente que no contenga reglas no generativas, reglas innecesarias ni sı́mbolos inútiles.
S
A
B
a)
D
E
C
S
A
B
D
c)
E
F
G
H
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
AC | BcdE | Ea | F g
Bdg | aA | a
b | Bb | Cc | c
a | aD | D | CF
Cc | Ee | a | A
Cc
AB | A | CS1 | 0E
0AS | λ | A0 | C
B1 | 1 | G | B
B1 | λ | 1F
E1
0D
H | 0G
B | CH
S
A
B
b)
D
E
F
::= AB | A | CS1 | 0E
::= 0AS | λ | A0 | C
::= B1 | 1
::= B1 | λ | 1F
::= E1
::= 0D
S
A
d) B
C
D
::=
::=
::=
::=
::=
Página 1 de 13
AbaC
BC
b|λ
D|λ
d
Hoja de Problemas 10 (cont.)
2. Obtén una gramática bien formada equivalente a cada una de las representadas por
las siguientes producciones:
a)
c)
e)
g)
S
A
B
D
E
C
S
A
B
D
E
F
G
H
S
B
A
D
S
A
B
C
D
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
AC | BcdE | Ea | F g
Bdg | aA | a
b | Bb | Cc | c
a | aD | D | CF
Cc | Ee | a | A
Cc
AB | A | CS1 | 0E
0AS | λ | A0 | C
B1 | 1 | G | B
B1 | λ | 1F
E1
0D
H | 0G
B | CH
Aa | B
A | bb | C
a | bc | B
dD | λ | S
a | aA | B | C
aB | λ
Aa
cCD
ddd
S
A
B
b)
D
E
F
::= AB | A | CS1 | 0E
::= 0AS | λ | A0 | C
::= B1 | 1
::= B1 | λ | 1F
::= E1
::= 0D
S
A
d) B
C
D
::=
::=
::=
::=
::=
S
f) A
B
::= AB | 0S1 | A | C
::= 0AB | λ
::= B1 | λ
S
A
h)
B
C
::=
::=
::=
::=
AbaC
BC
b|λ
D|λ
d
aA | aBB
aaA | λ
bB | bbC
B
Solución:
Apartado a:
La gramática bien formada equivalente es:
S
A
B
E
::=
::=
::=
::=
BcdE | Ea
Bdg | aA | a
Bb | c | d
Ea | a | Bdg | aA
Apartado b:
Para saber qué debemos hacer y cuál es el orden óptimo para hacerlo, sólo
tenemos que recordar el proceso que viene descrito en los apuntes:
• Eliminar reglas innecesarias (A ::= A).
• Eliminar reglas no generativas (A ::= λ).
• Eliminar reglas unitarias (A ::= B).
• Eliminar sı́mbolos inútiles.
Página 2 de 13
Hoja de Problemas 10 (cont.)
Pues aplicaremos el proceso.
• Eliminar reglas innecesarias.
En esta gramática no existe ninguna regla innecesaria. Si existiera, se
eliminarı́an directamente.
• Eliminar reglas no generativas
En esta gramática existen dos reglas no generativas: A ::= λ y D ::= λ.
Para eliminarlas, utilizaremos el Algoritmo 3 de los apuntes, que se
basa en la búsqueda de sı́mbolos anulables.
El conjunto de sı́mbolos anulables para esta gramática es SA = {A, D, S},
por lo tanto, ahora deberemos eliminar las producciones que nos llevan
directamente a λ y añadir tantas producciones como combinaciones podamos hacer con las producciones existentes que contienen elementos
del conjunto, sin volver a incluir producciones no generativas.
El resultado intermedio es:
S
A
B
D
E
F
::= AB | A | CS1 | 0E | B | C1
::= 0AS | A0 | C | 0 | 0A | 0S
::= B1 | 1
::= B1 | 1F
::= E1
::= 0D | 0
Para finalizar el algoritmo, observamos si el axioma se encuentra en el
conjunto de elementos anulables, y si es ası́, añadimos la producción
S ::= λ. Como es nuestro caso, la gramática sin reglas no generativas
es:
S
A
B
D
E
F
::=
::=
::=
::=
::=
::=
AB | A | CS1 | 0E | B | C1 | λ
0AS | A0 | C | 0 | 0A | 0S
B1 | 1
B1 | 1F
E1
0D | 0
• Eliminar reglas unitarias (A ::= B).
En esta gramática existen tres reglas unitarias: S ::= A,S ::= B y
A ::= C. Por lo tanto, deberemos aplicar el Algoritmo 4 (como existe
la producción S ::= λ, deberemos aplicar el algoritmo sin dicha regla
y añadirla al final del proceso).
∑ Para ello, calculamos los conjuntos
unitarios de cada uno de los N de la gramática:
U N IT ARIO(S)
U N IT ARIO(A)
U N IT ARIO(B)
U N IT ARIO(D)
U N IT ARIO(E)
U N IT ARIO(F )
Página 3 de 13
=
=
=
=
=
=
{S, A, B, C}
{A, C}
{B}
{D}
{E}
{F }
Hoja de Problemas 10 (cont.)
Pues, siguiendo el algoritmo, y colocando en cada elemento no terminal, todas las producciones pertenecientes a cada uno de los elementos
que tiene en su conjunto unitario (sin volver a insertar las reglas unitarias) finalizarı́amos el algoritmo. No nos debemos olvidar de añadir
la producción S ::= λ que hemos quitado antes de aplicar el algoritmo.
Por lo tanto, la gramática queda:
S
A
B
D
E
F
AB | CS1 | 0E | C1 | 0AS | A0 | 0 | 0A | 0S | B1 | 1 | λ
0AS | A0 | 0 | 0A | 0S
B1 | 1
B1 | 1F
E1
0D | 0
::=
::=
::=
::=
::=
::=
• Eliminar sı́mbolos inútiles.
Para terminar, eliminaremos los sı́mbolos inútiles de la gramática. Para
ello, aplicaremos en primer lugar el Algoritmo 1 y luego el Algoritmo 2
de los apuntes. El primer algoritmo sirve para descubrir los elementos
terminales que no van a producir palabras y el segundo algoritmo para
descubrir los elementos no terminales y terminales que no son accesibles
desde el axioma. El resultado después de aplicar el primer algoritmo
es:
S ::= AB | 0AS | A0 | 0 | 0A | 0S | B1 | 1 | λ
A ::= 0AS | A0 | 0 | 0A | 0S
B ::= B1 | 1
D ::= B1 | 1F
F ::= 0D | 0
Y el resultado final, después de haber aplicado el segundo algoritmo,
es la gramática bien formada:
S
A
B
::= AB | 0AS | A0 | 0 | 0A | 0S | B1 | 1 | λ
::= 0AS | A0 | 0 | 0A | 0S
::= B1 | 1
Apartado c:
La gramática bien formada equivalente es:
S
A
B
G
::=
::=
::=
::=
AB | 0AS | A0 | 0S | 0 | B1 | 1 | 0G | 0A | λ
0AS | A0 | 0S | O | 0A
B1 | 1 | 0G
B1 | 1 | 0G
Apartado d:
La gramática bien formada equivalente es:
S
A
B
C
::=
::=
::=
::=
AbaC | Aba | ba | baC
BC | b | d
b
d
Página 4 de 13
Hoja de Problemas 10 (cont.)
Apartado e:
La gramática bien formada equivalente es:
S
A
::=
::=
Aa | a | bc | bb
a | bc | bb
Apartado f:
La gramática bien formada equivalente es:
S
A
B
::= AB | 0S1 | 0AB | 0A | 0B | 0 | B1 | 1 | λ | 01
::= 0AB | 0A | 0B | 0
::= B1 | 1
Apartado g:
La gramática bien formada equivalente es:
S
A
B
::=
::=
::=
a | aA | Aa
aB
Aa | a
Apartado h:
La gramática bien formada equivalente es:
S
A
::= aA | a
::= aaA | aa
3. Obtén una gramática en Forma Normal de Chomsky equivalente a cada una de las
representadas por las siguientes producciones:
S
A
a)
B
C
::=
::=
::=
::=
AB | 0S1 | 0AB | 0B | 0A | 0 | B1 | 1 | λ
0AB | 0B | 0A | 0
B1 | 1 | 1C
C1
S ::= CB2 | 1B | λ
c) B ::= BC | 1
C ::= 2
S ::= 0A0 | 1B1 | BB
A ::= C
e)
B ::= S | A
C ::= S | λ
S ::= aAa | bBb | λ
A ::= C | a
B
::= C | b
b)
C ::= CDE | λ
D ::= A | B | ab
S ::= AAA | B
d) A ::= Aa | B
B ::= λ
S
f) A
B
Solución:
Página 5 de 13
::= abAB
::= bAB | λ
::= BAa | A | λ
Hoja de Problemas 10 (cont.)
Apartado a:
Lo primero que debemos hacer para obtener una gramática equivalente en
Forma Normal de Chomsky, es partir de una gramática independiente del
contexto bien formada (precondición del Algoritmo 5 de los apuntes). Por
lo tanto, como esta gramática no está bien formada, deberemos transformarla al igual que hacı́amos en el ejercicio anterior. La gramática bien formada
equivalente es:
S
A
B
::= AB | 0S1 | 0AB | 0B | 0A | 0 | B1 | 1 | 01 | λ
::= 0AB | 0B | 0A | 0
::= B1 | 1
Partiendo ahora de esta gramática bien formada, aplicaremos el Algoritmo
5 de los apuntes, que consta de las siguientes fases:
• Crearemos una gramática que contendrá todos los elementos no terminales y terminales de la gramática original, sin embargo, construiremos
un nuevo conjunto de producciones.
• Por cada elemento terminal que pertenezca a la gramática, creamos una
producción que lo reconozca. Como en esta gramática sólo existen los
terminales 0 y 1, añadiremos a nuestro nuevo conjunto de producciones
las siguientes:
C0
C1
::= 0
::= 1
• Para todas las producciones que en la parte derecha de la misma tengan
un número de elementos (terminales o no terminales) superior o igual
a 2, se realiza el cambio de todos los elementos terminales por los
correspondientes no terminales que acabamos de crear y las añadimos
al nuevo conjunto de producciones. Las producciones de longitud igual
a 1 se añaden según están (ya que si existe alguna producción de esta
longitud, la parte derecha de la misma debe ser un elemento terminal,
porque sabemos que partimos de una gramática bien formada y por
lo tanto, no existen reglas innecesarias ni reglas unitarias). Con lo que
nuestro nuevo conjunto de producciones queda:
S
A
B
C0
C1
::=
::=
::=
::=
::=
AB | C0 SC1 | C0 AB | C0 B | C0 A | 0 | BC1 | 1 | C0 C1
C0 AB | C0 B | C0 A | 0
BC1 | 1
0
1
• Ahora, todas las producciones de nuestro nuevo conjunto cuyo número
de elementos en la parte derecha sea superior a 2, las vamos a sustituir
por un conjunto de producciones de longitud 2:
Página 6 de 13
Hoja de Problemas 10 (cont.)
S
A
B
C0
C1
D1
D2
D3
::= AB | C0 D1 | C0 D2 | C0 B | C0 A | 0 | BC1 | 1 | C0 C1
::= C0 D3 | C0 B | C0 A | 0
::= BC1 | 1
::= 0
::= 1
::= SC1
::= AB
::= AB
• Para finalizar, como la producción S ::= λ existı́a en el conjunto de
producciones inicial, se incluye en el nuevo conjunto.
Por lo tanto, la gramática equivalente en Forma Normal de Chomsky es:
S
A
B
C0
C1
D1
D2
D3
::=
::=
::=
::=
::=
::=
::=
::=
AB | C0 D1 | C0 D2 | C0 B | C0 A | 0 | BC1 | 1 | C0 C1 | λ
C0 D3 | C0 B | C0 A | 0
BC1 | 1
0
1
SC1
AB
AB
Nota: Si nos damos cuenta, tanto el elemento D2 como D3 , tienen las
mismas producciones y por lo tanto, podrı́amos simplificar la gramática
eliminando uno de ellos y cambiando las producciones oportunas.
Apartado b:
La gramática inicial no está bien formada, la gramática bien formada equivalente que utilizaremos para pasar a FNC es:
S
A
B
::= aAa | bBb | aa | bb | λ
::= a
::= b
Y por lo tanto, después de aplicar el algoritmo, la gramática equivalente en
Forma Normal de Chomsky es:
S
A
B
Ca
Cb
D0
D1
::=
::=
::=
::=
::=
::=
::=
D0 Ca | D1 Cb | Ca Ca | Cb Cb | λ
a
b
a
b
Ca A
Cb B
Nota: Si nos damos cuenta, los elementos A - Ca y B - Cb , tienen las mismas
producciones y por lo tanto, podrı́amos simplificar la gramática eliminando
dos de ellos y cambiando las producciones oportunas.
Página 7 de 13
Hoja de Problemas 10 (cont.)
Apartado c:
La gramática de la que partimos es una gramática bien formada por lo que
podemos aplicar el algoritmo directamente. Y la gramática equivalente en
Forma Normal de Chomsky es:
S
B
C
C1
C2
D1
::=
::=
::=
::=
::=
::=
CD1 | C1 B | λ
BC | 1
2
1
2
BC2
Nota: Si nos damos cuenta, tanto el elemento C como C2 , tienen las mismas
producciones y por lo tanto, podrı́amos simplificar la gramática eliminando
uno de ellos y cambiando las producciones oportunas.
Apartado d:
La gramática inicial no está bien formada, la gramática bien formada equivalente que utilizaremos para pasar a FNC es:
S
A
::=
::=
AAA | AA | Aa | a | λ
Aa | a
Y por lo tanto, después de aplicar el algoritmo, la gramática equivalente en
Forma Normal de Chomsky es:
S
A
Ca
D1
::=
::=
::=
::=
AD1 | AA | ACa | a | λ
ACa | a
a
AA
Nota: Si nos damos cuenta, los elementos D2 , D5 y D7 , tienen las mismas
producciones y por lo tanto, podrı́amos simplificar la gramática eliminando
dos de ellos y cambiando las producciones oportunas.
Apartado e:
La gramática inicial no está bien formada, la gramática bien formada equivalente que utilizaremos para pasar a FNC es:
S
A
B
::= 0A0 | 1B1 | BB | 00 | 11 | λ
::= 0A0 | 1B1 | BB | 00 | 11
::= 0A0 | 1B1 | BB | 00 | 11
Y por lo tanto, después de aplicar el algoritmo, la gramática equivalente en
Forma Normal de Chomsky es:
Página 8 de 13
Hoja de Problemas 10 (cont.)
S
A
B
C0
C1
D1
D2
::=
::=
::=
::=
::=
::=
::=
C0 D1 | C1 D2 | C0 C0 | C1 C1 | BB | λ
C0 D1 | C1 D2 | C0 C0 | C1 C1 | BB
C0 D1 | C1 D2 | C0 C0 | C1 C1 | BB
0
1
AC0
BC1
Apartado f:
La gramática inicial no está bien formada, la gramática bien formada equivalente que utilizaremos para pasar a FNC es:
S
A
B
::= abAB | abB | abA | ab
::= bAB | bB | bA | b
::= BAa | Ba | Aa | a | bAB | bB | bA | b
Y por lo tanto, después de aplicar el algoritmo, la gramática equivalente en
Forma Normal de Chomsky es:
S
A
B
Ca
Cb
D1
D2
D3
D4
D5
D6
D7
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
Ca D1 | Ca D3 | Ca D4 | Ca Cb
Cb D5 | Cb B | Cb A | b
BD6 | BCa | ACa | a | Cb D7 | Cb B | Cb A | b
a
b
Cb D2
AB
Cb B
Cb A
AB
ACa
AB
Nota: Si nos damos cuenta, los elementos D2 , D5 y D7 , tienen las mismas
producciones y por lo tanto, podrı́amos simplificar la gramática eliminando
dos de ellos y cambiando las producciones oportunas.
Página 9 de 13
Hoja de Problemas 10 (cont.)
4. Obtén una gramática en Forma Normal de Greibach equivalente a cada una de las
representadas por las siguientes producciones:
A
a) B
C
::= BC
::= CA | a
::= AB | b
S
c) A
B
::= AB
::= BS | 1 | 1E
::= SA | 0 | 10
A ::= BC | a
e) B ::= Cc
C ::= BA | b
S ::= AaB | AaC
A ::= Ab | Ac | b | c
g)
B ::= BdC | 0
C ::= CeB | 1
A ::= CB2 | 1B |λ
b) B ::= BC | 1
C ::= 2
A ::= Ba
B ::= Cb
d)
C ::= cCD | c
D ::= Db | a
f) S
S
h) A
B
::= SS | aSb | λ
::= ABb | a
::= aaA | B
::= bAb
Solución:
Apartado a:
Lo primero que debemos comprobar para aplicar el Algoritmo 6 de los
apuntes, para obtener una gramática en Forma Normal de Greibach, es
asegurarnos que la gramática que nos proporcionan está en Forma Normal
de Chomsky. Si es ası́, aplicaremos el algoritmo directamente, en caso contrario, primero deberemos obtener una gramática bien formada y después
transformarla a FNC, para seguir con el algoritmo.
En este caso, la gramática está bien formada y se encuentra en Forma
Normal de Greibach, por lo tanto, podemos continuar directamente.
Antes de aplicar el algoritmo, debemos establecer un orden entre los elementos no terminales de la gramática. Este orden puede ser aleatorio, pero
también podemos escogerlo de forma que realicemos el mı́nimo número de
sustituciones. De esta forma, sólo debemos saber qué es lo que hace el algoritmo para establecer un orden más óptimo. En este caso, el algoritmo
realiza sustituciones para las producciones del tipo:
Ak ::= Aj α, sii k > j, en el orden establecido
por lo tanto, si tenemos una producción: A ::= BC, parece lógico que B
deba ser superior en orden que A, para evitar tener que hacer sustituciones.
Sin embargo, no siempre se puede establecer este orden tan fácilmente y en
caso de que no podamos hacerlo, elegiremos un orden arbitrario. Aunque
el orden no influye para conseguir una gramática en FNG, las gramáticas
que se obtienen con distintos órdenes no tienen porqué ser iguales (aunque
sı́ serán equivalentes).
Para este ejercicicio, seleccionaremos el orden:
Página 10 de 13
Hoja de Problemas 10 (cont.)
B<C<A
Ahora, comprobaremos, en orden ascentente, que todas las producciones
siguen correctamente el orden que hemos definido. Si no lo siguen, haremos
sustituciones hasta que consigamos que lo mantengan.
• Producciones del elemento B.
Para la producción B ::= CA, no debemos hacer nada, porque C es
superior en orden que B. Y la producción: B ::= a, ya es correcta.
• Producciones del elemento C.
La producción C ::= AB es correcta porque A es superior a C en el
orden que hemos establecido. La producción C ::= b es correcta.
• Producciones del elemento A.
La producción A ::= BC no es correcta, ya que B es inferior en orden
que A, por lo tanto, sustituimos todas las producciones de B en la
producción correspondiente, resultando:
A ::= CAC | aC
Otra vez deberemos sustituir la nueva producción A ::= CAC porque
es contraria al orden, con lo que obtendremos:
A ::= ABAC | bAC | aC
Estas producciones sı́ que respetan el orden, sin embargo, nos ha surgido una producción recursiva por la izquierda y la debemos eliminar.
Para ello, seguiremos el Lema 17 de los apuntes. Al realizar la transformación, la gramática completa nos queda de la siguiente forma:
A
B
C
T1
::=
::=
::=
::=
bAC | aC | bACT1 | aCT1
CA | a
AB | b
BAC | BACT1
A continuación, debemos insertar el nuevo elemento no terminal (T1 ),
que ha aparecido al eliminar la recursividad a izquierdas, dentro del orden, y lo insertamos al inicio, asegurándonos ası́ que cualquier elemento
no terminal que tenga como elemento más a la izquierda en cualquiera
de sus producciones ya es de un orden superior. Por lo tanto, el nuevo
orden es:
T1 < B < C < A.
Como ya hemos terminado de revisar todas las producciones y todas están
en orden y no hay producciones recursivas a izquierdas, ahora vamos a
empezar a sustituir, en orden descendente, en todas las producciones hasta
asegurarnos que todas tienen un elemento terminal como elemento más a la
izquierda.
Página 11 de 13
Hoja de Problemas 10 (cont.)
• Producciones de A.
Ya tienen todas un elemento terminal como elemento más a la izquierda
de todas sus producciones.
A
::= bAC | aC | bACT1 | aCT1
• Producciones de C.
Debemos sustituir la producción C ::= AB, por lo tanto:
A
C
::= bAC | aC | bACT1 | aCT1
::= bACB | aCB | bACT1 B | aCT1 B | b
• Producciones de B.
Debemos sustituir la producción B ::= CA, por lo tanto:
A
C
B
::=
::=
::=
bAC | aC | bACT1 | aCT1
bACB | aCB | bACT1 B | aCT1 B | b
bACBA | aCBA | bACT1 BA | aCT1 BA | bA | a
• Producciones de T1 .
Debemos sustituir las producciones D ::= BACT1 y D ::= BAC.
A
C
B
T1
::=
::=
::=
::=
bAC | aC | bACT1 | aCT1
bACB | aCB | bACT1 B | aCT1 B | b
bACBA | aCBA | bACT1 BA | aCT1 BA | bA | a
bACBAACT1 | aCBAACT1 | bACT1 BAACT1 | aCT1 BAACT1
| bAACT1 | aACT1 | bACBAAC | aCBAAC | bACT1 BAAC
| aCT1 BAAC | bAAC | aAC
Y esta es nuestra gramática equivalente en Forma Normal de Greibach.
Apartado b:
Apartado c:
La gramática que nos ofrecen no es una gramática bien formada. La gramática bien formada equivalente es:
S
A
B
::= AB
::= BS | 1
::= SA | 0 | 10
Si la ponemos en FNC:
S
A
B
C0
C1
::= AB
::= BS | 1
::= SA | 0 | C1 C0
::= 0
::= 1
Si establecemos como orden:
Página 12 de 13
Hoja de Problemas 10 (cont.)
S < A < B < C0 < C 1
La gramática en Forma Normal de Greibach que buscamos será:
S
A
B
C0
C1
T1
::= 1BASB | 0SB | 1C0 SB | 1BAT1 SB | 0T1 SB | 1C0 T1 SB | 1B
::= 1BAS | 0S | 1C0 S | 1BAT1 S | 0T1 S | 1C0 T1 S | 1
::= 1BA | 0 | 1C0 | 1BAT1 | 0T1 | 1C0 T1
::= 0
::= 1
::= 1BASBBA | 0SBBA | 1C0 SBBA | 1BAT1 SBBA | 0T1 SBBA
| 1C0 T1 SBBA | 1BBA | 1BASBBAT1 | 0SBBAT1 | 1C0 SBBAT1
| 1BAT1 SBBAT1 | 0T1 SBBAT1 | 1C0 T1 SBBAT1 | 1BBAT1
Apartado d:
Apartado e:
Apartado f:
La gramática que nos ofrecen no es una gramática bien formada. La gramática bien formada equivalente es:
S
SS | aSb | ab | λ
::=
Si la ponemos en FNC:
S
Ca
Cb
D1
::=
::=
::=
::=
SS | Ca D1 | Ca Cb | λ
a
b
SCb
Si establecemos como orden:
D1 < S < C a < C b
La gramática en Forma Normal de Greibach que buscamos será:
S
Ca
Cb
D1
T1
::=
::=
::=
::=
::=
aD1 | aCb | aD1 T1 | aCb T1 | λ
a
b
aD1 Cb | aCb Cb | aD1 T1 Cb | aCb T1 Cb
aD1 | aCb | aD1 T1 | aCb T1 | aD1 T1 | aCb T1 | aD1 T1 T1 | aCb T1 T1
Apartado g:
Apartado h:
La gramática que nos ofrecen no es una gramática bien formada. La gramática bien formada equivalente es:
S
::= a
que ya se encuentra en FNG.
Página 13 de 13
Descargar