Fnch

7
Gramáticas positivas y Forma Normal de Chomsky Una cuestión interesante de las gramáticas independientes del contexto es que si el lenguaje que generan contiene la cadena vacía λ, entonces debe existir al menos una regla del tipo N λ, donde N es una no terminal, ya que de otra manera no habría forma de derivar la cadena vacía; pero si el lenguaje generado no contiene λ, pueden existir reglas λ que, ¿podrían hacerse desaparecer y obtener una nueva gramática positiva?. En lo que sigue trataremos de dar una respuesta a esta pregunta. Previo hablaremos un poco de la forma positiva de una gramática, gramáticas que no contienen reglas de reescritura vacías, y como se puede obtener para una gramática que genera un lenguaje que no incluye λ. Definamos un encuadernamiento de longitud n como la secuencia de reglas de la forma Nn N n-1; N n-1, N n-2 … N 0 λ y el no terminal Nn se define como el origen del encuadernamiento. Si G es una gramática independiente del contexto que no genera la cadena vacía, definimos U n como el conjunto de los no terminales que aparecen como origen de los encadenamientos λ de longitud cero, esto es, los no terminales que aparecen del lado izquierdo de las reglas λ. A este conjunto le añadimos los orígenes de todos los encadenamientos λ de longitud 1, para obtener otro conjunto U 1, luego a U 1 le agregamos los orígenes de todos los encadenamientos λ de longitud 2 para formar un conjunto U 2 , y así sucesivamente. Ejemplo 1: Sea la siguiente gramática G que no puede generar la cadena vacía S xAxBx A yAy A B B zAz B λ Podemos observar que aunque la gramática no puede generar la cadena vacía, tiene una regla que sí la genera, por lo tanto esta forma de escribir la gramática no es una forma positiva. Ahora bien, U 0 contiene B, y U 1 contiene a A , puesto que la tercer regla permite obtener λ a partir de B, y no hay más no terminales que conduzcan a λ, puesto que la única no terminal que falta considerar en U es el símbolo inicial S, pero si este símbolo derivase λ, entonces no sería verdad que el lenguaje generado por G no incluye la cadena vacía.

Transcript of Fnch

Page 1: Fnch

Gramáticas positivas y Forma Normal de Chomsky

Una cuestión interesante de las gramáticas independientes del contexto es que si el lenguaje que

generan contiene la cadena vacía λ, entonces debe existir al menos una regla del tipo N λ,

donde N es una no terminal, ya que de otra manera no habría forma de derivar la cadena

vacía; pero si el lenguaje generado no contiene λ, pueden existir reglas λ que, ¿podrían

hacerse desaparecer y obtener una nueva gramática positiva?. En lo que sigue trataremos de

dar una respuesta a esta pregunta.

Previo hablaremos un poco de la forma positiva de una gramática, gramáticas que no

contienen reglas de reescritura vacías, y como se puede obtener para una gramática que

genera un lenguaje que no incluye λ. Definamos un encuadernamiento de longitud n como

la secuencia de reglas de la forma Nn Nn-1; Nn-1, Nn-2 … N0 λ y el no terminal Nn se

define como el origen del encuadernamiento.

Si G es una gramática independiente del contexto que no genera la cadena vacía, definimos

Un como el conjunto de los no terminales que aparecen como origen de los

encadenamientos λ de longitud cero, esto es, los no terminales que aparecen del lado

izquierdo de las reglas λ. A este conjunto le añadimos los orígenes de todos los

encadenamientos λ de longitud 1, para obtener otro conjunto U1, luego a U1 le agregamos

los orígenes de todos los encadenamientos λ de longitud 2 para formar un conjunto U2, y así

sucesivamente.

Ejemplo 1: Sea la siguiente gramática G que no puede generar la cadena vacía

S xAxBx

A yAy

A B

B zAz

B λ

Podemos observar que aunque la gramática no puede generar la cadena vacía, tiene una

regla que sí la genera, por lo tanto esta forma de escribir la gramática no es una forma

positiva. Ahora bien, U0 contiene B, y U1 contiene a A , puesto que la tercer regla permite

obtener λ a partir de B, y no hay más no terminales que conduzcan a λ, puesto que la

única no terminal que falta considerar en U es el símbolo inicial S, pero si este símbolo

derivase λ, entonces no sería verdad que el lenguaje generado por G no incluye la cadena

vacía.

Page 2: Fnch

Ahora, para cada regla de reescritura de la forma N w, donde w es una cadena de

terminales y no terminales, agregamos a G todas las reglas de reescritura de la forma N w¨,

donde w´ es cualquier cadena no vacía obtenida al eliminar de w una o más ocurrencias de no

terminales en U

Ejemplo 2: En la gramática del ejemplo anterior, podemos eliminar A y B (dado que están

en U) y adicionar a G las siguientes reglas de reescritura:

SxAxx eliminando B en S xAxBx

S xxBx eliminando A en SxAxBx

S xxx eliminando A y B en SxAxBx

Axx eliminando A en A yAy

B zz eliminando A en B zAz

Y si incluimos en G las reglas obtenidas, llegamos a la forma positiva siguiente:

S xAxBx

SxAxx

S xxBx

S xxx

A yAy

Axx

A B

B zAz

B zz

Por supuesto, las reglas agregadas permiten excluir la regla B λ

Podemos concluir que cualquier lenguaje independiente del contexto que no incluye la

cadena vacía, se puede generar por medio de una gramática independiente del contexto que

no tenga reglas λ.

Page 3: Fnch

A partir de una gramática en Forma Positiva, podemos ahora decir que la Forma Normal de

Chomsky cumple que el lado derecho de cualquier regla de reescritura consiste en un solo

terminal o exactamente dos no terminales.

Así la gramática

S AB

B SC

A a

C c

Tiene la Forma Normal de Chomsky, mientras que la gramática

S aSc

S ac

Genera el mismo lenguaje, pero no está en la Forma Normal de Chomsky.

El procedimiento para poner en la Forma Normal de Chomsky una gramática positiva es el

siguiente:

1. Para cada terminal x en G , introducimos un nuevo y único no terminal X, y la regla de

reescritura X x

2. Reemplazamos todas las ocurrencias de la terminal x en todas las demás reglas de G con X,

esto produce una gramática G´ en la cual el lado derecho de cada regla de reescritura una

sola terminal o una cadena de no terminales, y L(G´) = L(G)

3. Reemplazamos cada regla de G´de la forma NN1N2… Nn con N > 2, con las reglas

N N1R1

R1 N2R2

.

.

.

Rn-1Nn-1Nn

4. Si existen reglas de reescritura cuyo lado derecho contenga una sola terminal, consideramos

cada secuencia de reglas de reescritura de la forma NnNn-1, NNn-2, …, N2N1, e

Page 4: Fnch

introducimos la regla Nn x, si N1 x es una regla de G´e introducimos la regla

NnAB si N1 AB está en G´.

Ejemplo 4: La gramática del ejemplo anterior que no tiene la Forma Normal de Chomsky

S aSc

S ac

Se puede reescribir como Gramática en la Forma Normal de Chomsky, aplicando los 4

pasos del procedimiento anterior, de la siguiente manera:

Paso 1.

S aSc

S ac

A a

Cc

Paso 2.

SASC

SAC

Aa

Cc

Paso 3

S AR1

R1 SC

A a

C c

Paso 4 No aplica puesto que no existen reglas de reescritura cuyo lado derecho sea una sola

no terminal, y por lo tanto, la Forma Normal de Chomsky se obtiene al llegar al paso 3.

Ejemplo 5. Si en la gramática del ejemplo anterior se agregasen reglas de reescritura de

manera que fuese de la forma

Page 5: Fnch

S aSc

S ac

X Y

Y A

Paso 1.

S aSc

S ac

X Y

Y A

A a

Cc

Paso 2.

SASC

SAC

X Y

Y A

Aa

Cc

Paso 3

S AR1

R1 SC

X Y

Y A

A a

C c

Page 6: Fnch

Paso 4

S AR1

R1 SC

X x

Y x

A a

C c

Y la gramática se encuentra en su Forma Normal de Chomsky

Otra forma utilizada para escribir gramáticas libres de contexto, que no generan la cadena vacía, es la

llamada Forma Normal de Greibach o FNG, cuya estructura es tal que el lado derecho de las reglas de

reescritura inician con una terminal seguida de cero o más no terminales útiles. Esta forma se puede

obtener a partir de la Forma Normal de Chomsky siguiendo los pasos siguientes:

1. Construimos una gramática equivalente en forma normal de Chomsky.

2. Sustituimos las reglas recursivas a la izquierda, es decir, reglas de tipo X XY

3. Establecemos un orden en las variables, es decir de tal manera que todas las reglas

X serán de tipo Xi XjY con i< j y Y una no terminal.

4. Sustituimos las reglas que no tengan un símbolo terminal como primer símbolo en

su parte derecha.

Nota: Ejemplos de aplicación de este procedimiento serán tema de discusión en equipo, sugiriéndoles

usen el ejemplo 5, para obtener la Forma Normal de Greibach, en la seguridad de que el profesor

Luque les ayudará a despejar las dudas que puedan surgir, y en todo caso, pueden escribirme ya que

tienen mi correo

Page 7: Fnch

Tarea para el martes 13-11-2012 (última que yo les dejo antes de que asuma el grupo el profesor

Luque).

1. Escriba, en su Forma Positiva, la siguiente gramática

S xyAB

A xB

B yA

B λ

2. Utilizando la Forma positiva de la gramática del ejercicio 1, escríbala en la Forma Normal de

Chomsky.

3. Utilizando la Forma Normal de Chomsky, escriba la gramática del ejercicio 2 en la Forma Normal

de Greibach.