Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica 5
Practica 5
FORMALES
Práctica 5 - Simplificación de gramáticas
incontextuales
1. Objetivos
1. Objetivos.
La presente práctica presenta unos algoritmos que permiten obtener gramáticas
incontextuales (casi) equivalentes a una dada con determinadas propiedades
estructurales. La simplificación de gramáticas incontextuales afecta a tres aspectos
distintos pero interrelacionados :
Los puntos que seguiremos para abordar las transformaciones anteriores son los
siguientes :
z Formulación de los algoritmos de transformación en cada caso.
z Integración de los algoritmos anteriores para finalmente obtener gramáticas
simplificadas
Una cadena la representaremos por la lista asociada a sus símbolos (ej. abcd se representa
por {a,b,c,d} y, en el caso de que sea la cadena vacía λ, se representará por {}). El
conjunto de A-producciones se representará por una lista con dos elementos, el primero
de ellos será el propio símbolo A y el segundo será a su vez una lista que contendrá como
elementos las listas asociadas a los consecuentes de las producciones. Veamos el
siguiente ejemplo
A → ABa | λ | abB
se representa por la lista
{A,{{A,B,a},{},{a,b,B}}}
S → ab | λ | Ab
A → bba | S
se representará como
{{S,{{a,b},{},{A,b}}},{A,{{b,b,a},{S}}}}
Los símbolos generativos asociados a una gramática incontextual son aquellos capaces de
generar en uno o más pasos de derivación cadenas formadas sólo por símbolos
terminales. El objetivo de este primer apartado consiste en detectar los símbolos
generativos de una gramática incontextual y eliminar de la misma aquellos símbolos que
no los sean. El siguiente algoritmo nos proporciona el esquema de cálculo de los
símbolos auxiliares generativos de una gramática incontextual.
gen={}
gen2=T
Repetir
gen = { A ∈ N : A → x ∈ P, x ∈ gen2*}
gen = gen - gen2
gen2 = gen ∪ gen2
hasta gen = {}
gen=gen2 - T
fin_del_Método
Actividad 1
Dada una gramática incontextual {N,T,P,S} desarrollar un módulo Mathematica que
detecte los símbolos auxiliares que contienen producciones formadas únicamente por
símbolos terminales.
Actividad 2
Dada una gramática incontextual {N,T,P,S} desarrollar un módulo Mathematica que,
basándose en el Algoritmo 1, detecte los símbolos generativos de la gramática.
(* Construcción de G1 *)
N1 = gen ∪ { S }
P1 = { A → x ∈ P : A ∈ gen, x ∈ (gen ∪ T)*}
fin_del_Método
Actividad 3
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} y la lista de símbolos generativos de la misma gen, proporcione como salida
una gramática equivalente sin símbolos generativos de acuerdo con el Algoritmo 2.
Dada una gramática incontextual, los símbolos alcanzables de la misma son aquellos que
aparecen en cualquier derivación que se produce a partir del axioma. El objetivo de este
segundo apartado de la práctica es la detección de los símbolos alcanzables de una
gramática incontextual. El siguiente algoritmo proporciona un esquema de cálculo de los
símbolos alcanzables de una gramática incontextual
alc={S}
aux1={S}
Repetir
aux2 = { a ∈ N ∪ T : ∃ A∈ aux1, ∃ α,β ∈(N ∪ T)* : A → α a β ∈
P}
aux1 = aux2 - (alc ∪ T)
alc = alc ∪ aux2
hasta aux1 = {}
fin_del_Método
Actividad 4
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} proporcione como salida una lista alc de los símbolos alcanzables, terminales
y auxiliares, de la gramática de entrada
(* Construcción de G1 *)
N1 = alc ∩ N
T1 = alc ∩ T
P1 = { A → α∈ P : A ∈ N1 }
fin_del_Método
Actividad 5
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} y una lista de los símbolos alcanzables de la misma, alc, proporcione como
salida una gramática equivalente sin símbolos no alcanzables de acuerdo con el algoritmo
4.
S → aEBC | SA | A
A → AbA | BB
B → BBb | a | CC
C → aCD | CbC
D → bDD | AaC
E → a | Ea
S → SA | A
A → AbA | BB
B → BBb | a
E → a | Ea
S → SA | A
A → AbA | BB
B → BBb | a
Actividad 6
Integrar los módulos desarrollados anteriormente para desarrollar un módulo
Mathematica que, tomando como entrada una gramática {N,T,P,S}, proporcione como
salida una gramática equivalente sin símbolos inútiles.
Anulables={}
Repetir
aux = { A ∈ N - Anulables : ∃ x ∈ Anulables*, (A → x) ∈ P }
Anulables = Anulables ∪ aux
hasta aux = {}
fin_del_Método
Actividad 7
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S}, detecte aquellos símbolos auxiliares que tienen la producción vacía (A → λ).
Actividad 8
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S}, detecte los símbolos anulables de la misma. Para ello, siga el esquema de
cálculo del algoritmo 5.
*
Sea la sustitución g: (N ∪ T)* → 2(N ∪ T) definida como sigue
z Si x ∈ Anulables, g(x) = { x, λ }
Actividad 9
Desarrolle un módulo Mathematica que, tomando como entrada dos listas de símbolos o
cadena vacía l y m, proporcione como salida una lista con las cadenas producto de la
concatenación de l y m. Por ejemplo, si l = {A,{},B} y m = {a,B} entonces lm = {{A,a},
{A,B},{a}, {B},{B,a},{B,B}}
fin_del_Método
Actividad 10
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} y una lista de los símbolos anulables de la misma Anulables, proporcione
como salida una gramática (casi) equivalente sin producciones vacías.
S → SS | AaB
A → aAB | BB
B → aB | λ
Resultado del Algoritmo 5
Anulables = {A,B}
S → SS | AaB | aB | Aa | a
A → aAB | aB | aA | a | BB | B
B → aB | a
C(A)={A}
aux1={A}
Repetir
aux2 = ∪B ∈ aux { C ∈ N : (B → C) ∈ P }
1
aux1 = aux2 - C(A)
C(A) = C(A) ∪ aux1
hasta aux1 = {}
fin_del_Método
Actividad 11
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} y un símbolo auxiliar A, proporcione como salida una lista que contenga el
conjunto de símbolos C(A). Aplicar en este caso el esquema de cálculo expuesto en el
algoritmo 7.
Actividad 12
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S}, proporcione como salida una lista que contenga los conjunto de símbolos C
(A) para cada símbolo auxiliar A. La lista de salida debe tener el formato C(N)= {{A,C
(A)}, {B,C(B)}, ... }.
fin_del_Método
Actividad 13
Desarrollar un módulo Mathematica que, tomando como entrada una gramática
{N,T,P,S} y la lista de símbolos alcanzables a partir de cada símbolo auxiliar C(N)=
{{A,C(A)}, {B,C(B)} ... }, proporcione como salida una gramática equivalente sin
producciones unitarias.
S → SS | aB A
A → aAA | B
B → aB | a
C(S) = {S,A,B}
C(A) = {A,B}
C(B) = {B}
S → SS | aB | aAA | a
A → aAA | aB | a
B → aB | a
6. Simplificación general de gramáticas.
Una vez vistos distintos aspectos en cuanto a transformaciones previas de una gramática,
nos proponemos abordar un proceso conjunto que permita obtener a partir de una
gramática otra equivalente (o casi equivalente) que esté totalmente simplificada, esto es
sin símbolos inútiles ni producciones unitarias ni producciones vacías. Para ello
proponemos un orden de ejecución de los distintos algoritmos ya formulados.
S → SS | CA
A → bAA | aC | B
B → aSS | BC
C → CC | λ
Anulables = {C}
La gramática resultado es
S → SS | CA | A
A → bAA | aC | a | B
B → aSS | BC | B
C → CC | C
S → SS | CA | bAA | aC | a | aSS | BC
A → bAA | aC | a | aSS | BC
B → aSS | BC
C → CC
Tercer paso : Eliminación de símbolos inútiles y obtención de la gramática simplificada
S → SS | bAA | a | aSS
A → bAA | a | aSS
Actividad 14
Desarrollar un módulo Mathematica que a partir de una gramática de entrada obtenga
otra (casi) equivalente totalmente simplificada. Para ello, integrar los módulos
desarrollados en actividades anteriores.