Está en la página 1de 41

GRAMTICAS

Introduccin
Las gramticas se utilizan para describir lenguajes. Existe una primera clasificacin para las gramticas,
y esta estar en funcin a los tipos de lenguajes que genere, esto es ya sean lenguajes naturales o lenguajes
formales.
Un lenguaje natural es como el Espaol o el Ingls o como cualquier otro lenguaje de comunicacin
entre personas, en donde la estructura de las frases, se describen por medio de una gramtica que agrupa las
palabras en categoras sintcticas tales como sujetos, predicados, frases preposicionales, etctera. Estas
construcciones gramaticales surgen como un intento de explicar las formas admitidas por el Lenguaje, con las
cuales se construyen las frases, aunque en su definicin se presentarn excepciones gramaticales.
Un Lenguaje Formal, por el contrario surge a partir de su gramtica, y por lo tanto no presenta
excepciones en su definicin. Esto es as, porque los Lenguajes Formales son los que se utilizan para que se
comuniquen los hombres con las mquinas. De esta manera a partir de las gramticas formales es como surgen
los Lenguajes de Programacin.

Gramticas para describir Lenguajes Naturales


Para poder describir a los Lenguajes Naturales, podemos escribir reglas como las que enumeramos en
el siguiente conjunto

Vale la pena destacar que esta es una versin muy simplificada de la gramtica castellana, y si bien da lugar
a oraciones que son correctas en nuestro idioma, tambin puede generar oraciones que resulten incorrectas
desde el punto de vista tanto semntico (de su significado), como sintctico (de su estructura).
Este es el caso de:
El rbol juega (incorrecta semnticamente)
Los madre come risueo (incorrecta sintcticamente)
Estos errores se solucionan en la lengua castellana agregando reglas que regulan y restringen las
combinaciones de terminales y que corresponden al anlisis morfolgico y semntico del lenguaje. (En los
lenguajes formales no existe el anlisis morfolgico que es el de gnero, nmero y persona, es decir el que
controla la concordancia entre sujeto y verbo o la concordancia entre artculo, sustantivo y adjetivo)

Gramticas Formales

Estas gramticas permitirn en forma intencional describir en determinado lenguaje; esto se har
definiendo el alfabeto sobre el que se construirn sus palabras, denominadas smbolos terminales; un smbolo
inicial del que se partir para la obtencin de cualquier de las palabras del lenguaje llamado axioma inicial, un
conjunto de smbolos especiales denominados no terminales, los que permitirn expresar representaciones o
estados intermedios en el proceso de generacin de las palabras del lenguajes; y un conjunto de reglas de
producciones o de reescritura, que sern las que permitan realizar las transformaciones necesarias, partiendo
desde el axioma inicial, produciendo los reemplazos de smbolos no terminales, mediante la utilizacin de las
reglas de produccin hasta obtener las palabras del lenguaje.
Definicin
Un gramtica formal G, es una 4-tupla, que queda definida de la siguiente manera:

En donde:
:
Conjunto de Smbolos que representan el Alfabeto de Smbolos Terminales, en
donde toda palabra del lenguaje generado por esta gramtica, estar formada por
smbolos o caracteres definidos en este conjunto.
:
Conjunto de Smbolos que representan el Alfabeto de Smbolos No Terminales.
ste conjunto de smbolos ser utilizado como smbolos auxiliares en la derivacin de
cadenas, pero no formaran parte de las cadenas del lenguaje.

De las definiciones anteriores se observa lo siguiente:

S:

Smbolo No Terminal especial, que pertenece al conjunto de Smbolos No Terminales (


S N ), denominado smbolo inicial o Axioma de la Gramtica.

P:

Conjunto finito de reglas o producciones que tienen como nica restriccin que en la parte
izquierda debe haber al menos un smbolo no terminal.

Ejemplo: dada la gramtica

Donde

Tambin podramos escribirlas:

Producciones
Una produccin, o regla de produccin es un par ordenado de palabras ( x, y ), con x e y
, donde
la presencia de x se encuentra como parte integrante de cualquier otra palabra, puede ser sustituida por y; lo
que permite transformar palabras en otras.
Como notacin suele utilizarse x := y, denominada notacin BNF ( por Backus - Naur Form, por sus
creadores ).

La palabra x es denominada la parte izquierda o primer miembro de la produccin; y la palabra y, la parte


derecha o segundo miembro.

Simbologa: :=

Sern producciones el conjunto P de la gramtica de ejemplo

Derivacin directa
Es la aplicacin directa de una produccin ( x := y), a una determinada palabra v para convertirla en w.
Simbologa:

Ejemplo: dado v = z . x . u
Con v, w, z, u

; y aplicando ( x := y) obtenemos w = z . y . u

Para el caso de la gramtica G1, podemos partiendo de una palabra 0B1, obtener, aplicando las reglas
de produccin (B : = 0A0 ) lo siguiente: 0B1
00A01

Derivacin
Es la aplicacin de una secuencia de producciones a una palabra
Simbologa:

Ejemplo: En el ejercicio anterior continuaremos aplicando reglas de produccin y pasaremos de una


palabra 0B1 a una palabra 0000101
0B1

00A01

000B101

00001101

Derivacin por la izquierda


Si al aplicar las reglas de produccin se producen los reemplazos de smbolos no terminales que se encuentren
mas a la izquierda de la cadena en la que se debe producir el reemplazo.

Ejemplo: En el ejercicio anterior continuaremos aplicando reglas de produccin y cuando se presente la


alternativa de que smbolo aplicar, lo haremos eligiendo el que se encuentre mas a la izquierda.

El conjunto de producciones es:

0B1

00AB1

000A0B1

0000B10B1

00000110B1

00000110011

Derivacin por la derecha


Si al aplicar las reglas de produccin se producen los reemplazos de smbolos no terminales que se encuentren
mas a la derecha de la cadena en la que se debe producir el reemplazo.

Ejemplo: En el ejercicio anterior continuaremos aplicando reglas de produccin y cuando se presente la


alternativa de que smbolo aplicar, lo haremos eligiendo el que se encuentre mas a la derecha.

El conjunto de producciones es:

0B1

00AB1

00A0AB1

00A0A011

00A01011

00101011

Sentencia
Una cadena x se la denominar sentencia, cuando la misma est formada slo por elementos
pertenecientes al alfabeto de smbolos terminales, y haya sido obtenida a travs de una derivacin desde el
axioma de la gramtica.

Continuando con la gramtica de ejemplo

Las palabras 1 y 0011 son sentencias de la gramtica.

Forma Sentencial
Una forma sentencial x es una cadena formada por smbolos que pertenecen tanto al alfabeto de
smbolos terminales como al de no terminales, siendo obtenida a travs de una derivacin a partir del axioma
de la gramtica.

En la gramtica de ejemplo
gramtica.

, las cadenas 00A01, 00101 y 000B101 son sentencias de la

Lenguaje
Se denomina as al lenguaje generado por una gramtica, el que estar conformado por el conjunto de todas
las sentencias o palabras que pueden ser generados a travs de la misma. En otras palabras, sern todas las
sentencias que pueden ser generadas desde el axioma. de la gramtica, con la aplicacin de todas las
derivaciones que pueden aplicarse de acuerdo al conjunto de reglas de producciones de la gramtica
determinada.
As, podemos decir que un Lenguaje posee una Definicin Formal, si existe una Gramtica cuyas
producciones permitan derivar o generar sus palabras.
El lenguaje generado por la gramtica de ejemplo G1, puede expresarse como:

Lenguaje Formal
As, podemos decir que un Lenguaje posee una Definicin Formal, o es un Lenguaje Formal; si existe
una Gramtica cuyas producciones permitan derivar o generar sus palabras.

Recursividad
Al analizar la recursividad en gramticas, y por lo tanto tambin en el lenguaje generado, podemos hacer una
analoga con el concepto de funcin recursiva en el mbito de la programacin, donde una funcin es recursiva
cuando se llama a s misma.
Producciones recursivas
Una produccin es recursiva cuando el smbolo no terminal del lado izquierdo de la regla de produccin, aparece
tambin en el lado izquierdo de la misma.
Las siguientes producciones son recursivas: A := 0A1, B := BA01
Producciones recursivas por izquierda
Una produccin es recursiva por izquierda cuando el smbolo no terminal del lado izquierdo de la regla de
produccin, aparece en primer lugar en el lado derecho de la misma.
Ejemplo:

A := A1101

Producciones recursivas por derecha


Una produccin es recursiva por derecha cuando el smbolo no terminal del lado izquierdo de la regla de
produccin, aparece en el ltimo lugar en el lado derecho de la misma.
Por ejemplo, la siguiente produccin es recursiva por derecha: B := 0100B
Gramticas recursivas
Una gramtica es recursiva cuando posee al menos una produccin recursiva.
Recursividad en un paso
Las producciones recursivas antes mencionadas, poseen recursividad en un paso, dado que al efectuar una
derivacin, aplicando la regla de produccin recursiva, obtenemos una forma sentencial que incluye el mismo
smbolo no terminal usado al derivar.
Recursividad en ms de un paso
Otro caso de recursividad, diferente al caso anterior, al aplicar sucesivas derivaciones, obtenemos una forma
sentencial que incluye un smbolo no terminal, que habamos derivado anteriormente.
El caso ms sencillo, puede verse con solamente dos producciones:
A := B0, B := 0A100
De manera simblica:

Levantamiento de la recursividad por izquierda


La recursividad sobretodo por izquierda ya sea en un paso o mas de un paso es un efecto no deseado en una
gramtica.
El proceso de eliminacin de la recursividad por izquierda consta de los siguientes pasos:

1)

Eliminamos la recursividad por izquierda en las producciones recursivas en un paso.

2)

Eliminamos la recursividad por izquierda en las producciones recursivas en ms de un paso.

1) Eliminacin de la recursividad por izquierda en un paso:

Eliminaremos la recursividad por izquierda en las producciones de un


mismo smbolo no terminal.

Para cada

Donde los

, si las producciones de A son:

No comienzan con A

Se crea un nuevo smbolo No Terminal A . En donde ahora

Y el nuevo conjunto de reglas de produccin se obtendr a travs del siguiente procedimiento:

Ejemplo:

Dada la Gramtica

Las dos primeras reglas son recursivas por lo tanto se crear un nuevo smbolo no Terminal E y el
nuevo conjunto de smbolos no terminales quedar:

Se debern eliminar todas las producciones de E dentro del conjunto P de producciones de la gramtica,
y se deber obtener el nuevo conjunto P de producciones de la gramtica. Aplicando el procedimiento
descripto.

Donde:

Entonces para completar la definicin de la nueva gramtica equivalente a la dada, pero sin
producciones recursivas por izquierda en un paso nos queda:

Prueba del Ejemplo:

Veremos ahora como una cadena es aceptada por ambas gramticas G y G

Vemos entonces que la cadena a , sera aceptada por ambas gramticas G y G.

2) Eliminacin de la recursividad por izquierda en mas de un paso:

An eliminando, la recursividad por la izquierda de las producciones de todos los smbolos no


terminales, puede haber recursividad en mas de un paso.
Para mostrar el procedimiento de aplicacin lo haremos a travs de un ejemplo:

Ejemplo:

a) Se debern disponer a los smbolos No terminales en algn orden:


b) Se crean dos ciclos anidados que van a ir de 1 hasta n siendo n la cantidad de smbolos no terminales
de la gramtica.
.i = 1 .. n
.j = 1 .. n

Recorremos ambos ciclos y :

Si i j :

reemplazar cada produccin

por :

Donde:
Son todas las reglas de Aj

Eliminar la recursividad por izquierda de las Ai

En nuestro ejemplo

Donde n = 2 por lo tanto


.i = 1 .. 2
.j = 1 .. 2

comenzamos ambos ciclos:

1)

En el ejemplo nos quedara:

De existir producciones de E que en el lado derecho comienza con E habra que sustituir la E de la parte
derecha por todas las producciones que llevan a E

2) Ahora hay que eliminar la posible recursin por izquierda en

= E pero no hay

Continuamos con el incremento de la variable del ciclo interno.

* i=1;(
1)

= E)

; j=2

= T)

En el ejemplo nos quedara:


E := T

Esto da lugar a un nuevo conjunto de producciones que se obtienen reemplazando T en la parte derecha
por todos sus producciones.
E := E + E ;
E := (E) + E ;

E := E * E ;
E := (E) * E ;
E := var ;
E := num ;
T := E ;
T := (E) ;
2)

Ahora eliminamos la recursividad por izquierda de E. Se eliminan todas las producciones de E y


se las reemplaza por las que se obtienen de haber incluido el nuevo smbolo no Terminal E (Se
aplica el procedimiento de eliminacin de recursividad en un paso).

E := var E ;
E := num E ;
E := var ;
E := num ;

E:= + E E ;
E:= * E E ;
E:= + E ;
E:= * E ;

E := (E) + E ;
E := (E) * E ;
T := E ;
T := (E) ;
E := (E) + E E;
E := (E) * E E;

1)

Al reemplazar las producciones:

Queda:
E := var E ;
E := num E ;
E := var ;
E := num ;

E := (E) + E ;
E := (E) * E ;
E := (E) + E E;
E := (E) * E E;

E:= + E E ;
E:= * E E ;
E:= + E ;
E:= * E ;

T := (E) ;
T: = var E ;
T: = num E ;
T := var ;
T := num ;
T := (E) + E E ;
T := (E) * E E ;
T := (E) + E ;
T := (E) * E ;
2)

Ahora hay que eliminar las recursiones de T pero no hay.

1)

Al reemplazar las producciones:

2)

No quedan:

Por lo tanto nuestra nueva gramtica sin producciones recursivas ya sean en un paso o varios pasos nos
queda:

Con el conjunto de producciones de del punto anterior.

Factorizacin a izquierda
Esta situacin se da cuando producciones de un mismo smbolo no Terminal, tienen en la parte derecha una
primera parte que es comn a ambas producciones.
Por ejemplo:
A := cDBec ;
A := cDCb ;

Entonces se crea un nuevo smbolo no Terminal E y se reescriben las producciones

A := cDE ;
E := Bec ;
E := Cb ;

rboles de derivacin Sintctica


Un rbol de derivacin sintctica es una representacin grfica de la derivacin de una forma sentencial,
desde el axioma de una gramtica. Donde:

La raz del rbol, representa el axioma de la gramtica.

Las hojas del rbol representan smbolos terminales de la gramtica.

Los nodos intermedios del rbol representan smbolos no terminales de la gramtica.

Las reglas de produccin se representan como ramas desde nodos intermedios, a nodos hijos,
hojas o intermedios; tantos como smbolos terminales o no terminales (respectivamente) posea
la regla de produccin en el lado derecho,

Ejemplo: Dada la gramtica

Donde

La cadena
sigue:

0B1

, puede ser obtenida a partir de la aplicacin de las sucesivas reglas de produccin como

00AB1

001B1

001011

Y el rbol de derivacin sintctico para esta cadena quedar:

Ambigedad
El concepto de ambigedad en lenguajes naturales, se aplica tambin en los lenguajes formales. Veremos a
continuacin diversas definiciones de ambigedad.
Sentencias ambiguas
Una sentencia es ambigua cuando la misma puede ser producida a travs de rboles sintcticos diferentes
Ejemplo: Dada la Gramtica

Realizaremos una derivacin por izquierda para obtener la cadena a

E+E
id + E
id + E * E
id + id * E
id + id * id

* id + id * id

Y su grafo ser:

Y si realizamos una derivacin por derecha para esta misma cadena a

E*E
E * id
E + E * id
E + id * id
( id + id) * id

* id + id * id

Y el grafo correspondiente para la derivacin de esta cadena ser:

Tanto con una derivacin por derecha o por izquierda se puede obtener la misma cadena pero a travs de
rboles de derivacin diferentes. En este caso se dice que la cadena en cuestin es ambigua, y lo tanto la
Gramtica respectiva tambin ser ambigua.
En este caso en particular la gramtica puede ser convertida en no ambigua , o sea que se puede levantar la
ambigedad, para esto introduciremos reglas semnticas que establecern el orden de precedencia de los
operadores + y *.
Para lograr esto introduciremos nuevos smbolos no terminales:
T = Trmino
F = Factor
E = Expresin

Y la nueva gramtica quedar:

Y sea la cadena

. Ser generada

E+T
T+T

T+T*F
F+ T *F
id + T * F
id + F * F
id + id * F
id + id * id

* id + id * id

O sea que esta nueva gramtica, tambin es capaz de generar la cadena, pero ahora resulta que la
misma ya no es ambigua.

Gramticas ambiguas
Una gramtica ser ambigua cuando tiene al menos una sentencia ambigua.

Tipos de Gramticas Formales

Las gramticas formales en base a la definicin realizada por Noam Chomsky, se clasifican en cuatro
grupos, las que van desde los tipos ms general a los tipos ms especficos, dependiendo stas de las
restricciones que se les impongan a la conformacin de las reglas de Produccin (Reglas de reescritura)

De esta forma, la jerarqua propuesta nos posibilitar: Por un lado el de poder clasificar las gramticas
formales y por ende a los Lenguajes que estas gramticas generen. Y por otro lado el de clasificar a los
Autmatas que reconocern a los Lenguajes generados por estas gramticas

Jerarqua de Chomsky
Toda gramtica Formal, queda definida por:

En base a las restricciones que se le impongan al conjunto P de reglas de produccin, se dar origen a
los distintos tipos de Gramticas para la generacin de lenguajes.
Adems de las restricciones que se impongan para clasificar en uno u otro tipo de gramticas, es comn
observar en las distintas bibliografas, diferencias en su definicin en lo que respecta a que si el lenguaje
generado a travs de la gramtica, permitir o no aceptar la cadena vaca. Esto es, que si en la definicin de
las reglas de produccin, no se permite la definicin de reglas , ni siquiera desde el axioma inicial, la gramtica
definida no podr generar la cadena nula.
Este punto parece no ser trivial, ya que al no incluir reglas- no permitira la generacin de cadenas
nulas. En este material, a las gramticas, se les permitir la posibilidad de generar las cadenas nulas, o sea se

les permitir definir las reglas con , pero estarn permitidas slo desde el axioma o smbolo inicial de la
gramtica, con lo que esta ser la nica regla compresora admitida por la gramtica.

Gramticas Tipo 3 : Gramticas Regulares

Este tipo de gramticas es el resultado de imponer la mayor cantidad de restricciones a la conformacin


de las reglas de produccin, por lo tanto resulta que el lenguaje que puede generar este tipo de gramticas es
el menos expresivo (lenguaje Mnimo)
En este tipo de gramticas las reglas de reescrituras tendrn la siguiente forma:
Si es una G3 Lineal por Derecha
A := cB
A := a
S :=
O si es una G3 Lineal por Izquierda
A := Bc
A := a
S :=

En resumen de las reglas de produccin:


Parte Izquierda : Slo un Smbolo No Terminal
Parte Derecha : Podr contener un terminal seguido de un no terminal o un no terminal seguido de un terminal
ya sea por derecha o por izquierda, de un terminal solamente, o producir l slo si el no terminal de la izquierda
es el axioma inicial de la gramtica

Es importante destacar que ambas gramticas ya sean lineales por izquierda o derecha son
equivalentes entre s, lo que significa que generan el mismo lenguaje, y que siempre es posible a partir de la
expresin en una determinada forma ( por derecha o por izquierda) encontrar su equivalente.

Conversin de G3-LI a G3-LD

El proceso para la conversin consta de los siguientes pasos:


1) Se transforma la Gramtica para que no haya ninguna regla, que en la parte derecha tenga el axioma inicial
de la gramtica (S)

Se crea un smbolo S

Toda Regla S := x donde S es el axioma inicial de la gramtica y x es de la forma aB


con

se crea S := x

Cada regla A := aS se transforma en A := a S

2) Se crea un grafo dirigido

Nodos: Existir un nodo por cada

Se crean los arcos etiquetados. En donde si A := aB de la forma

Se crean arcos para cada regla

De existir, regla de produccin S :=

del tipo

. Se crea un arco sin etiqueta

3) En el grafo:

Se intercambian las etiquetas del axioma y de

Se invierten las direcciones de los arcos

4) Se transfiere el grafo al conjunto de reglas

Cada Nodo

de la gramtica excepto

Cada arco etiquetado a


de la forma A := Ba

Si existe arco del axioma a

que uniendo

con

, se crea una produccin

, se crea A :=

Ejemplo de conversin:
Dada la siguiente Gramtica lineal por derecha, construir la Gramtica lineal por izquierda equivalente.

P : A := 1B
A :=
B := 0A
B := 0
Aplicando el procedimiento de conversin:
Paso 1:
Se crea A
Se crean:
A := 1B
A :=
Se transforma B := 0A en B := 0A

Entonces ahora las reglas de produccin de la Gramtica nos queda:


P : A := 1B
A :=
A := 1B

A :=
B := 0A
B := 0
La Produccin A :=

se elimina ya que

slo puede ser producida por el axioma.

Paso 2:
Se construye el grafo dirigido

Paso 3:
Se transforma el grafo

Paso 4:
El nuevo conjunto de Reglas de Produccin queda:
P : A :=
A := B0
B := 1

B := A1
A := B0

En donde ahora el conjunto de reglas de produccin son LI (Lineales por Izquierda) resultan equivalentes a las
LD (Lineales por derecha) iniciales

Gramticas Tipo 2: Gramticas Independientes del Contexto

Este tipo de gramticas tambin denominadas libres de contexto o de contexto libre, son de un inters
muy particular, ya que las mismas definen las reglas sintcticas de la mayora de los lenguajes de programacin
que son el objeto de nuestro estudio.

En este tipo de gramticas las reglas de reescrituras tendrn la siguiente forma:

la nica regla compresora admitida es del tipo S :=

, siendo S el axioma de la gramtica

Resumen de las reglas de produccin:


Parte Izquierda : Slo un Smbolo No Terminal
Parte Derecha : Sin Restricciones, excepto que slo podr producir

, si a la izquierda est el axioma inicial.

Sintaxis de los Lenguajes de programacin

La Sintaxis en los Lenguajes de Programacin es la forma en la que se escribirn los programas.

Dar las reglas de sintaxis para un lenguaje significa indicar como se escriben las instrucciones,
declaraciones y otras construcciones del lenguaje.

El propsito prioritario de la Sintaxis es el de proporcionar una notacin para comunicar la informacin


entre el programador y el procesador de lenguaje (Compilador).

Gramticas Bien Formadas:

Las gramticas, en particular las CGL (Gramticas de Contexto Libre), a partir de la definicin del
Lenguaje que pueden generar y para prepararlas de mejor manera para posteriores etapas en el desarrollo de
un compilador, se las debe poder tratar eficazmente, ya sea para poder construir el autmata con pila que sea

capaz de reconocer el Lenguaje generado por la Gramtica, o en el armado y manipulacin de los rboles de
derivacin sintctico que se encuentran presentes en todo el proceso de Compilacin.
Veremos entonces, diferentes formas de presentar a una misma gramtica, que en todo momento
mantendr la equivalencia (generarn el mismo Lenguaje), pero sern presentadas de distinta manera.
Una gramtica est bien formada si esta Limpia, no tiene reglas no generativas, y no tiene reglas de
redenominacin.

Gramtica Limpia:

Una gramtica estar limpia, si no tiene reglas innecesarias, smbolos inaccesibles, ni smbolos superfluos
(ya sean Terminales o No Terminales)
Reglas innecesarias:
Son las que tienen la forma:
A := A
Este tipo de reglas de produccin, ya que no producen derivaciones tiles en la gramtica.

Smbolos Inaccesibles:
Son aquellos smbolos no terminales, que nunca podrn ser alcanzados desde el axioma inicial de la gramtica.
Es decir

Ejemplo:

Observaciones:

La regla C := C es innecesaria, por lo tanto puede ser eliminada.

Los smbolos B y C resultan inaccesibles desde el axioma inicial, y sern eliminados en la definicin
de la gramtica, y tambin todas la reglas de produccin que los contengan. (B := 1C3 ya que C :=
C, ya fue eliminada en el paso anterior).

La gramtica G2 equivalente a G2 nos queda:

Smbolos Superfluos:
Estos pueden ser de dos tipos, Terminales, y No Terminales

Smbolo Terminal Superfluo: Es aquel smbolo Terminal, que nunca podr ser alcanzado por una
derivacin partiendo desde el axioma inicial.
O sea, no existe ninguna produccin

Ejemplo: En la G2, los smbolos terminales 2 y 3 jams podrn ser alcanzados por ninguna produccin,
por lo tanto deben ser eliminados de la gramtica.

Smbolo No Terminal Superfluo: Es aquel smbolo No Terminal, del cual sus reglas de reescritura
constan del lado derecho siempre de uno o ms smbolos No Terminales. O lo que es lo mismo que
nunca producen , o smbolo Terminal nicamente a travs de derivaciones.
Forma de proceder para detectarlos:
1) Se marcan todos los smbolos No Terminales que estn en la parte izquierda de una produccin y en
cuya parte derecha slo aparezcan smbolos terminales o .
2) Sucesivamente, se continuarn marcando los smbolos No terminales que estn a la izquierda de las
reglas de produccin que a la derecha tengan , smbolos Terminales o smbolos No Terminales
previamente marcados.
3) Una vez finalizada estas iteraciones, se eliminarn todos los smbolos No Terminales junto con las
producciones asociadas a ellos, de los Smbolos No Terminales que no hayan sido marcados.
Ejemplo: Continuando con el ejercicio anterior, las producciones de G2

Observaciones:

En la primer iteracin, correspondiente a T1, el nico smbolo No Terminal posible de marcar


es A, que corresponde a la Produccin A := .

En una segunda iteracin, vemos que la produccin D := 1A, a la derecha de la misma consta
de un smbolo Terminal (1) y un Smbolo No Terminal (A) previamente marcado, por lo tanto
es posible marcar el smbolo No Terminal (D) que se encuentra a la Izquierda.

Realizando una prxima iteracin, vemos que no queda ningn No Terminal a la izquierda que
se pueda marcar.

De esta manera resulta que el smbolo No Terminal E , resultar superfluo y se eliminar,


el smbolo y todas las producciones asociadas a ste.

Nota:
Observe que lo que se marcan son smbolos terminales, no producciones.
Por lo tanto es posible ahora definir a G2 que resultar equivalente a G2 que a su vez es equivalente a G2,
pero que de acuerdo a su definicin no constar con reglas innecesarias, smbolos inaccesibles, ni smbolos
superfluos, ya sean Terminales o No Terminales.

Esta gramtica G2, ser equivalente a G2, lo que significa que ambas sern capaces de generar el mismo
lenguaje.
Una gramtica limpia, para comportarse como una gramtica bien formada, no deber contener reglas No
Generativas , ni reglas de Redenominacin

Reglas No Generativas:

Una regla es No Generativa cuando produce l sin ser el axioma de la gramtica

Ejemplo:

Dada la gramtica G2 = ({0}, {A,B,C},A,P)

Dentro del conjunto de reglas de produccin, existen dos reglas No Generativas, que son las que vamos a
eliminar, esas son:
B :=
C :=
Para poder eliminar una regla No Generativa, y que la incidencia en la generacin del lenguaje de la gramtica
sea equivalente, es necesario que en toda regla de produccin que a la derecha aparezca el smbolo No
Terminal en cuestin proceder de la siguiente manera. La regla tal cual esta escrita deber ser mantenida del
conjunto de reglas de producciones pero se deber adicionar una nueva regla de produccin, que se obtendr
de quitarle el smbolo No Terminar de la regla No Generativa que se encuentre a la derecha de la regla de
produccin.
Comenzaremos por la primera:
B :=
Escribiremos el nuevo conjunto de reglas de produccin.

Las reglas de producciones que se encuentran marcadas con *, son las que dan origen a las nuevas reglas de
produccin que las hemos referenciado con , Las producciones que no hemos marcado al igual que las
referenciadas con * son mantenidas del conjunto original de producciones.
De esta manera, ha sido posible eliminar la produccin No generativa B := l, sin perder el poder de generacin
de la gramtica.

Ahora partiendo de P' tomamos la siguiente regla No Generativa

C :=

Observaciones:
El significado de los * y con que se encuentran marcadas las reglas de produccin, tienen el mismo significado
que el descrito en P'.
Lo que ahora debe hacernos prestar atencin son las producciones que hemos identificado con *1 y *2..
En el caso de *1 ( B := B ) es una Regla Innecesaria, por lo tanto puede ser eliminada de la gramtica, sin
prdida de generalidad en lo que respecta a la generacin de lenguaje.
En el caso de *2 (B :=
) es una regla No Generativa que ha aparecido en el nuevo conjunto de reglas de
producciones P'', la cual se debe eliminar aplicando nuevamente el proceso.

Entonces nuevamente debemos eliminar a la regla No Generativa


B :=
Siguiendo el mismo proceso anterior, nos queda

Esta gramtica G2''' es una gramtica equivalente a G2 pero que no contiene reglas No Generativas.
Reglas de Redenominacin
Una regla es de Redenominacin cuando
A := B

con A,B

Para poder eliminarlas se borra esa regla y se genera una nueva produccin
A := x
Por cada regla B := x

Ejemplo: Partimos de la Gramtica G2'''

La regla B := C es de Redenominacin y por lo tanto debe ser eliminada.


Para eliminarla debemos proceder de la siguiente manera:
Se eliminar la regla B := C, y se deber reemplazar por:
B := 0B
B := 0
Y por lo tanto la la nueva gramtica nos queda:

Ejercicio 1 de aplicacin:
Dada la siguiente

Construir la gramtica Bien Formada equivalente a la dada.


Desarrollo:
Para que una gramtica tipo 2 este bien formada debe cumplir lo siguiente:
a)

Gramtica Limpia
i.

Smbolos inaccesibles

ii.

Reglas innecesarias

iii.

Smbolos superfluos (Terminales y No Terminales)

b)

Sin Reglas no generativas

c)

Sin Reglas de redenomibacin

a.i ) Se buscan aquellos smbolos que no son accesibles desde el smbolo inicial (axioma).
Los Smbolos No Terminales D y F resultan inaccesibles, por lo tanto se eliminarn de la gramtica junto con
las producciones asociadas a stos.

Las reglas de produccin a eliminar son:


D := B1
D :=
D := 1F
F := 0D
La Gramtica y el conjunto de producciones quedar:

a.ii) Reglas innecesarias NO HAY


a.iii.) Smbolos superfluos
Terminales Superfluos: No hay ya que a la derecha de las reglas de produccin los smbolos 0
y 1 son utilizados.
No Terminales superfluos:
Efecto procedimiento:
1) Smbolos no terminales a marcar, que en la parte derecha tengan slo smbolos terminales
o
Se marcan a la izquierda los smbolos No Terminales A y B

2) Se contina iterando pero agregando en la evaluacin a los smbolos No Terminales


previamente marcados.
Se marca ahora el Smbolo No terminal S

3) Ya no queda nada ms para marcar.

Por lo tanto a la izquierda de las reglas de produccin los smbolos E y C no han podido ser marcados
por lo tanto se eliminarn de la gramtica junto con las producciones asociadas a stos.
Las reglas que se eliminan son:
S := CS1
S := 0E
A := C
E := E1
La Gramtica, ya esta limpia y nos queda:

b) Ahora buscamos las reglas No Generativas


A :=

Esta regla tiene que ser eliminada

Tomamos el conjunto de producciones de la gramtica y efectuamos las operaciones necesarias

Las producciones marcadas con * , son las que se introducen al eliminar A :=

c) Eliminacin de reglas de redenominacin


Existen dos reglas de redenominacin
S := A
S := B
Al eliminar
S := B
Introduciremos nuevas reglas de produccin
S := B1
S := 1
Y al eliminar

S := A
Se introducirn:
S := 0AS
S := 0S
S := A0
S := 0
Ahora si podemos definir la Gramtica CGL, que resultar equivalente a la CGL dada, pero que se encontrar
bien formada

Ejercicio 2 de aplicacin:

Construir la gramtica Bien Formada equivalente a la dada.


Desarrollo:

a.i ) Se buscan aquellos smbolos que no son accesibles desde el smbolo inicial (axioma).
NO HAY
a.ii) Reglas innecesarias
NO HAY
a.iii.) Smbolos superfluos
Terminales Superfluos:
NO HAY
No Terminales superfluos:
NO HAY
b) Ahora buscamos las reglas No Generativas
NO HAY
c) Eliminacin de Reglas de Redenominacin
NO HAY

Por lo tanto la gramtica dada ya estaba bien formada

Formas Normales
Las gramticas Independientes del contexto, son las que se utilizan de la definicin de la mayora de los
lenguajes de programacin.
La definicin de las Gramticas Tipo 2 como las hemos visto hasta ahora, cumplen con su cometido
original de cualquier punto de vista (interaccin Hombre/Mquina) se lo enfoque. Desde el punto de vista de un
usuario de un lenguaje de programacin, necesita saber exactamente cmo se debe escribir un programa, el
formato de cada proposicin, su puntuacin, frases opcionales, etc. Y desde el punto de vista del compilador
(interfaz con la mquina) necesita saber el conjunto completo de instrucciones y programas bien escritos que
debe aceptar el traductor.
Ahora cuando nos centramos en forma estricta en el diseo de un compilador para un lenguaje de
programacin tendremos que tener en cuenta lo siguiente:

Hay varias etapas y fases a cumplir y cada una de estas tomar como entrada definiciones en etapas
anteriores.

El anlisis sintctico no slo sirve para controlar la estructura correcta de las frases admitidas por un
lenguaje de programacin, sino que prepara estructuras para usos posteriores.

Estas estructuras servirn para el anlisis semntico (si tiene sentido adems de estar escrito en
forma correcta) y posterior generacin de instrucciones en el programa objeto.

Por tal motivo las GT2 nos debern permitir la utilizacin de algoritmos eficientes dentro de cada una de las
etapas.
Al analizar los rboles de derivacin sintcticos, stos deben ser construidos y se entregarn como resultado
del proceso de el anlisis sintctico y el mismo se ver afectado de acuerdo a cmo son impuestas restricciones
adicionales a la conformacin de la gramtica.

La normalizacin de las GT2 con formas normales ya sea la de Chomsky o la de Greibach, es sumamente
til en el proceso de desarrollo de un Compilador, no slo en la fase de anlisis sintctico, sino que tiene un alto
impacto en las fases posteriores.
Las restricciones impuestas a las reglas de produccin no alteran el poder de generacin de la gramtica,
sino que el impacto se evidencia en cmo se construirn los rboles de derivacin sintcticos, que se utilizarn
en todas las etapas posteriores .
Este es el producto de salida de la fase de anlisis sintctico y es utilizado por todas las fases posteriores.
En la etapa de sntesis sera ms deseable partir de un rbol sintctico generado a partir de una FNC,
ya que tengo un rbol binario y por lo tanto el algoritmo para convertir a cdigo de tres direcciones resulta
directo.
Si tengo normalizada la gramtica en FNG la ventaja significativa la obtengo directamente en la etapa de
anlisis sintctico ya que se facilitan los algoritmos de los Analizadores Sintcticos LL
Partiendo de una Gramtica Tipo 2 sin alterar el poder expresivo en la definicin del lenguaje que describe,
pueden obtenerse diversas formas equivalentes dispuestas en alguna forma especial Normalizada que
llamaremos formas Normales.
Ejemplo 1
S := abcdefgS
S := abcdefg
Nos dara un rbol sintctico densamente tupido y casi incontrolable en los algoritmos de recorrido
Ejemplo 2
S := A ; A := B ; B := C
C := D ; D := a ; D := A
Nos dara un rbol sintctico intilmente profundo y delgado en donde los algoritmos de recorrido serian
extensos e ineficientes.
Es deseable poder establecer las restricciones necesarias en las reglas de produccin, de tal manera
que los rboles de derivacin sintcticos resultantes, no sean innecesariamente complejos o intilmente
sencillos.
Por este motivo existen dos modelos o Formas Normales. Las Formas Normales de Chomsky y
deGreibach.
Para cada una de ellas vamos a determinar:

Restricciones impuestas a las reglas de reescritura.

Ventajas y desventajas de cada una.

Forma de obtenerlas.

Ejemplo prctico

Forma Normal de Chomsky (FNC)


Las reglas de produccin pueden adoptar las siguientes formas:
A := BC
A := a
S :=

Siendo S Axioma Inicial

Donde:
Ventaja: Todos los rboles de derivacin son binarios y favorecen la etapa de generacin de Cdigo Intermedio.
Siempre es posible pasar a un cdigo de 3 direcciones BNF.

Desventaja: Deja la posibilidad de permitir recursiones por la izquierda en uno o ms pasos, que es un efecto
no deseado en una gramtica para la implementacin de algoritmos.

Procedimiento de Conversin de una GT2 en FNC

Para la conversin debe partirse por lo menos de una Gramtica limpia, es decir, sin reglas innecesarias,
sin smbolos inaccesibles y sin smbolos superfluos Terminales y No terminales.
Para todas las producciones de la gramtica, se debe realizar:
1) Si la produccin est en FNC no se hace nada y se la deja como est
2) Si la parte derecha de la produccin comienza con un smbolo terminal.

a) Se busca si existe alguna produccin en donde el terminal en cuestin sea producido por un no
terminal. O sea si existe un C: = a y sea la nica produccin de C
Si esto ocurre, a la produccin original se la remplaza por:

b) No existe ninguna produccin C : = a , entonces se crea un nuevo smbolo terminal N, que N : = a


, y nos queda:

3) La parte derecha de la produccin comienza con un smbolo no terminal pero no continua con slo un No
terminal

En este caso se busca si existe o se crea una produccin con un smbolo no terminal que produzca el
terminal deseado

b)
En este caso se crea una nueva regla con un nuevo smbolo no terminal

Si es que esta regla no existiese, quedando


A:= BN`
4) Se contina hasta que todas las producciones nuevas o existentes estn en FNC.
Ejemplo de Conversin de una GT2 en FNC

Desarrollo:
a) Tomo la produccin 1
A : = CB2
La parte derecha comienza con un No terminal pero a continuacin hay ms de un smbolo ( No terminal o
terminal ) entonces creo un nuevo smbolo no terminal D que produce B2
D : = B2
A : = CD
La produccin de A ha quedado en Forma Normal de Chomsky, pero la nueva D no. La parte derecha de D
comienza con un no terminal pero est seguida de un terminal.
Ahora vemos que existe una produccin C : = 2 (Produccin 6), y es lo nico que es capaz de producir C, o sea
que la produccin D sin prdida de generalidad como:

Produccin
Original

A := CB2

Equivalente

Forma
Normal
Chomsky

de

D := BC
A := CD

b) Tomemos ahora la produccin 2


A : = 1B
La parte derecha comienza con un smbolo terminal, as que hay que aplicar el paso 2b. Debe crearse un
nuevo smbolo No terminal E, ya que slo debe haber una regla que produzca 1
A : = EB

E:=1
Por lo tanto nos quedara:
Produccin
Original

Equivalente

A := 1B

Forma
Normal
Chomsky

de

A := EB
E := 1

Las producciones 3, 4 ,5 6, ya est en FNC y no hay que hacerles nada y la nueva G en FNC queda :

Forma Normal de Greibach (FNG)


Las reglas de produccin pueden adoptar las siguientes formas:

Ventaja: Resulta una representacin sumamente til para realizar el proceso de conversin de una GT2 a un
autmata a Pila, que se derive en un analizador sintctico LL.
Desventaja: El rbol sintctico resultante, puede no ser un rbol binario lo que en la Generacin del Cdigo
intermedio necesitar de un proceso ms laborioso.

Procedimiento de Conversin de una GT2 en FNG

1)

Si la Gramtica no est limpia debe limpiarse como primer paso.

2)

Debe eliminarse la recursividad por izquierda.

3)

No puede haber reglas que en su parte derecha comiencen por un smbolo No terminal.
Por lo tanto:
Se establece un orden de los smbolos No terminales, y en las reglas que no estn en FNG se producen
los reemplazos necesarios, en el orden en que han sido fijados los smbolos No terminales.

4) Si todas las reglas estn en FNG no se hace nada.


Ejemplo de Conversin de una GT2 en FNG
Dada la Gramtica Tipo 2

1)

2)

La gramtica ya est limpia.

No tiene reglas innecesarias

No tiene smbolos inaccesibles

No tiene smbolos superfluos Terminales y No terminales

Eliminacin de producciones recursivas por la izquierda


La produccin 3 es recursiva por la izquierda
B := BC

Para eliminarla, se aplica el teorema respectivo para la eliminacin de recursividad por


izquierda, en donde se borran todas las producciones del smbolo B se crea un nuevo smbolo
No Terminal Dquedando.
B:= BC
B:=1
En donde tomamos
Creamos nuevas
producciones para reemplazarlas en base al procedimiento establecido

Y nos queda
B := 1D
B := 1
D := CD
D := C
Ahora eliminamos la regla de redenominacin D := C y aadimos la regla D := 2 quedando
B := 1D
B := 1
D := CD
D := 2

El conjunto de reglas de produccin hasta ahora nos queda:

3) Se establece un orden de los smbolos No terminales resultando - A B D C


*

Tomamos

A := CB2

y generamos

A:= 2B2 ya que C := 2

Tomamos
y generamos

D := CD
D := 2D ya que C := 2

El conjunto de reglas de produccin hasta ahora nos queda:

4) nos queda solamente una produccin que no est en FNG


A := 2B2
Como existe una produccin C := 2 y slo existe una sola produccin C, no es necesario crear
otro smbolo adicional y la podemos reemplazar, quedando
A := 2BC
Finalmente la gramtica en FNG queda:

Gramticas Tipo 1: Gramticas Dependientes del Contexto

Este tipo de gramticas tambin denominadas sensibles al contexto. En este tipo de gramticas las
reglas de reescrituras tendrn la siguiente forma:

S :=

La nica regla compresora admitida es del tipo S :=

, siendo S el axioma de la gramtica.

Por lo tanto, con reglas no compresoras deber cumplirse que:

Resumen de las reglas de produccin:


Parte Izquierda : Sin Restricciones, slo debe contener algn smbolo No Terminal a ser reemplazado.
Parte Derecha : Sin Restricciones, excepto que slo podr producir l, si a la izquierda est el axioma inicial.

Gramticas Tipo 0: Gramticas Estructuradas por Frase

Este tipo de gramticas, desde el punto de vista de la informtica Terica, no despiertan mayor inters,
ya que al ser la menos restrictiva en cuanto a la conformacin de las reglas de produccin, los lenguajes
generados resultan los ms amplios.
Tambin son denominadas con estructura de frase o sin restricciones. En este tipo de gramticas las
reglas de reescrituras tendrn la siguiente forma:

En este tipo de gramticas son admitidas las reglas compresoras, y esto es lo que las diferencia de las
gramticas anteriores que slo admitan reglas compresoras si estas se producan a travs del axioma inicial

Resumen de las reglas de produccin:


Parte Izquierda : Sin Restricciones, slo debe contener algn smbolo No Terminal a ser reemplazado.
Parte Derecha : Sin Restricciones, y admite reglas compresoras

Tablas comparativas de las Gramticas

A continuacin se presentan dos tablas, las que permitirn identificar en forma sencilla, las diferencias
que se les han impuesto a la conformacin de las reglas de produccin en lo que respecta a clasificacin de las
gramticas formales.

Clasificacin de Gramticas
TIPOS DE GRAMATICAS

Formato de las Reglas de


produccin

Tipo 3

A := cB

Regulares

A := a

Lineal por Derecha

S :=

Tipo 3

A := Bc

Regulares

A := a

Lineal por Izquierda

S :=

Tipo 2

A :=

Independientes del Contexto

S :=

Tipo 2

A := BC

Independientes de Contexto

A := a

Forma Normal de Chomsky

S :=

Significado de los Smbolos

Tipo 2
Independientes de Contexto
Forma Normal de Greibach

Tipo 1
Dependientes del Contexto

Tipo 0
:=

Estructuradas por frases

Formato de reglas de produccin


TIPOS
GRAMATICAS

DE

Reglas de Produccin
Parte Izquierda

Parte derecha

Slo un Smbolo No Terminal

Podr contener un terminal seguido


de un No terminal o No terminal
seguido de un terminal ya sea por
derecha o por izquierda, de un terminal
solamente, o producir
slo si el No
terminal de la izquierda es el axioma
de la gramtica.

del

Slo un Smbolo No Terminal

Sin restricciones, excepto que slo


podr producir , si a la izquierda est
el axioma inicial.

del

Sin restricciones, slo debe


contener algn smbolo No Terminal
a reemplazar.

Sin restricciones, excepto que slo


podr producir , si a la izquierda est
el axioma inicial.

por

Sin restricciones, slo debe


contener algn smbolo No Terminal
a reemplazar.

Sin restricciones, y admite reglas


compresoras

Tipo 3
Regulares

Tipo 2
Independientes
contexto
Tipo 1
Dependientes
Contexto
Tipo 0
Estructuradas
frases

También podría gustarte