Eliminación de Símbolos Inútiles

Anuncio
Eliminación de Símbolos Inútiles
Veremos cómo eliminar los sı́mbolos inútiles de una gramática. Lo haremos con
dos algoritmos, que son definidos en la demostración de los siguientes lemas.
Lema 1 Dada una GLC G = (V, T, P, S) con L(G) 6= ∅, se puede encontrar
una GLC equivalente G0 = (V 0, T, P 0, S) tal que para todo A ∈ V 0 existe algún
w ∈ T ∗ para el cual A ⇒∗ w.
Demostración: Podemos usar el siguiente algoritmo para encontrar V 0:
Elimina-No-Generadores(G)
1 OLDV ← ∅
2 N EW V ← {A|A → w ∈ P, para algún w en T ∗ }
3 while OLDV 6= N EW V
4 do OLDV ← N EW V
5
N EW V ← OLDV ∪ {A|A → α para algún α en (T ∪ OLDV )∗ }
6 V 0 ← N EW V
Las producciones en P 0 son las mismas que las de P , pero eliminando las que
contienen variables que no están en V 0.
Jorge Baier Aranda, PUC
48
Es posible demostrar por inducción en el largo de la derivación de w que se
cumple el enunciado del lema.
Lema 2 Dada una GLC G = (V, T, P, S) podemos encontrar una gramática
equivalente G0 = (V 0, T 0, P 0, S 0) tal que para cada X en V 0 ∪ T 0 existen α y β en
(V 0 ∪ T 0)∗ para los cuales S ⇒∗ αXβ.
Demostración: Los conjuntos V 0 y T 0 pueden ser construidos usando el algoritmo:
Elimina-Inalcanzables(G)
1 N EW V ← {S}
2 N EW T ← {}
3 repeat
4
OLDV = N EW V
5
OLDT = N EW T
6
N EW V ← OLDV ∪ { Todas las variables de α | A ∈ OLDV,
7
A → α ∈ P}
8
N EW T ← OLDT ∪ { Todos los terminales de α | A ∈ OLDV,
9
A → α ∈ P}
10
until OLDV = N EW V ∧ OLDT = N EW T
11 V 0 = N EW V ; T 0 = N EW T ;
Jorge Baier Aranda, PUC
49
Claramente, la gramática G0 es equivalente a G porque sólo se han removido
sı́mbolos que no participan en la derivación de alguna palabra a partir de S.
Jorge Baier Aranda, PUC
50
Eliminación de Símbolos Inútiles
Teorema Sea L un LLC tal que L 6= ∅. Entonces L es generado por una gramática
sin sı́mbolos inútiles.
Idea de demostración: Como L es un LLC, tenemos una gramática G para éste.
Usando el lema 1, podemos generar una gramática equivalente G0 sin sı́mbolos que
no generan palabras. Luego, aplicando el lema 2 sobre G0 podemos generar G00 que
no tendrá los sı́mbolos que no pueden ser ocupados en derivaciones en G0. De esta
forma G00 no tiene sı́mbolos inútiles.
El procedimiento se puede esquematizar con:
lema 1
lema 2
G 7−→ G0 7−→ G00
Jorge Baier Aranda, PUC
51
Demostración: Por el lema 1 sabemos que podemos construir una gramática para
L, G1 = (V1, T1, P1, S) en donde, para todo X ∈ V1 existe algún w ∈ T ∗ para el
cual X ⇒∗ w.
Por el lema 2 sabemos que podemos definir una gramática G2 = (V2, T2, P2, S)
a partir de G que genera el mismo lenguaje que G1 tal que para todo X en V2 ∪ T2
existen α y β en (V2 ∪ T2)∗ para los cuales S ⇒∗ αXβ.
Supongamos que en G2 hay un sı́mbolo X inútil. Por el lema 1, sabemos que
S ⇒∗G2 αXβ. Como los sı́mbolos que están en G2 también estaban en G1 se cumple
también que X ⇒∗ w, para algún w ∈ T2∗. Luego,
S ⇒∗ αXβ ⇒∗ w,
para algún w ∈ T2∗. Esto contradice el supuesto que X es inútil.
Jorge Baier Aranda, PUC
52
Eliminación de Producciones en Vacío
En esta sección demostraremos que si ε 6∈ L podemos eliminar todas las
producciones del tipo A → ε.
Teorema Si L = L(G) para alguna GLC G = (V, T, P, S), entonces L − {ε} es
L(G0) donde G0 = (V, T, P 0, S) es una GLC sin sı́mbolos inútiles ni producciones en
vacı́o.
Definición: Decimos que una variable A es anulable si A ⇒∗ ε.
Demostración: Por el teorema anterior, sabemos que podemos generar una gramática G sin sı́mbolos inútiles. Podemos determinar los sı́mbolos anulables de G siguiendo
el siguiente algoritmo iterativo:
Repetir mientras se encuentran nuevos sı́mbolos anulables.:
Si A → ε es una producción, entonces A es anulable.
Si B → α es una producción, y todos los sı́mbolos de α son anulables, entonces
B es anulable.
Jorge Baier Aranda, PUC
53
El conjunto P 0 de producciones se construye de la siguiente manera:
Si A → X1X2 · · · Xn ∈ P agregar todas las producciones A → α1α2 · · · αn a P 0
donde:
1. Si Xi no es anulable, entonces αi = Xi.
2. Si Xi es anulable αi es Xi o ε.
3. No todos los αi son ε.
Lo que falta es demostrar que G0 es efectivamente equivalente a G. Esto se
puede probar sin mucha dificultad probando que para todo A ∈ V y w ∈ T ∗ se
cumple que:
A ⇒∗G w si y solo si A ⇒∗G0 w
La demostración se hace por inducción en el número de aplicaciones de ⇒.
Jorge Baier Aranda, PUC
54
Eliminación de Producciones Unitarias
El objetivo de esta sección es eliminar las producciones del tipo A → B.
Teorema Cada LLC sin ε es definido por una gramática sin sı́mbolos inútiles ni
producciones en vacı́o ni producciones unitarias.
Demostración: Sea L un LLC sin ε y L = L(G) para alguna gramática G =
(V, T, P, S). Por el teorema anterior, suponemos que no hay producciones en vacı́o.
Podemos construir una gramática G0 = (V, T, P 0, S), donde P 0 se arma de la
siguiente manera:
1. Agregar todas las producciones no unitarias de P a P 0.
2. Si A ⇒∗ B (con A, B ∈ V ) entonces agregar a P 0 todas las producciones A → α
donde B → α es una producción no unitaria de P .
Es sencillo ver ahora que si A → w ∈ P entonces A ⇒∗G0 w, con A ∈ V y
w ∈ T ∗.
Jorge Baier Aranda, PUC
55
Descargar