Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
S:
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.
Donde
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 ).
Simbologa: :=
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:
00A01
000B101
00001101
0B1
00AB1
000A0B1
0000B10B1
00000110B1
00000110011
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.
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.
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
1)
2)
Para cada
Donde los
No comienzan con A
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:
Ejemplo:
Si i j :
por :
Donde:
Son todas las reglas de Aj
En nuestro ejemplo
1)
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
= E pero no hay
* i=1;(
1)
= E)
; j=2
= 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)
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)
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)
1)
2)
No quedan:
Por lo tanto nuestra nueva gramtica sin producciones recursivas ya sean en un paso o varios pasos nos
queda:
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 ;
A := cDE ;
E := Bec ;
E := Cb ;
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,
Donde
La cadena
sigue:
0B1
, puede ser obtenida a partir de la aplicacin de las sucesivas reglas de produccin como
00AB1
001B1
001011
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
E+E
id + E
id + E * E
id + id * E
id + id * id
* id + id * id
Y su grafo ser:
E*E
E * id
E + E * id
E + id * id
( id + id) * id
* id + id * id
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 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.
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.
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.
Se crea un smbolo S
se crea S := x
del tipo
3) En el grafo:
Cada Nodo
de la gramtica excepto
que uniendo
con
, 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
A :=
B := 0A
B := 0
La Produccin A :=
se elimina ya que
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
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.
Dar las reglas de sintaxis para un lenguaje significa indicar como se escriben las instrucciones,
declaraciones y otras construcciones del lenguaje.
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:
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).
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 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.
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:
Ejemplo:
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.
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.
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
Ejercicio 1 de aplicacin:
Dada la siguiente
Gramtica Limpia
i.
Smbolos inaccesibles
ii.
Reglas innecesarias
iii.
b)
c)
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.
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:
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:
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
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:
Forma de obtenerlas.
Ejemplo prctico
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.
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:
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
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
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 :
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.
1)
2)
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.
1)
2)
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
Tomamos
A := CB2
y generamos
Tomamos
y generamos
D := CD
D := 2D ya que C := 2
Este tipo de gramticas tambin denominadas sensibles al contexto. En este tipo de gramticas las
reglas de reescrituras tendrn la siguiente forma:
S :=
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
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
Tipo 3
A := cB
Regulares
A := a
S :=
Tipo 3
A := Bc
Regulares
A := a
S :=
Tipo 2
A :=
S :=
Tipo 2
A := BC
Independientes de Contexto
A := a
S :=
Tipo 2
Independientes de Contexto
Forma Normal de Greibach
Tipo 1
Dependientes del Contexto
Tipo 0
:=
DE
Reglas de Produccin
Parte Izquierda
Parte derecha
del
del
por
Tipo 3
Regulares
Tipo 2
Independientes
contexto
Tipo 1
Dependientes
Contexto
Tipo 0
Estructuradas
frases