You are on page 1of 8

GRAMTICAS

FORMALES

Introduccin
Estamos familiarizados con el concepto tradicional de gramtica que, de forma intuitiva,
podramos considerar como un conjunto de reglas que nos indican qu es correcto y qu
no lo es en un lenguaje natural. Con el fin de acercarnos a una definicin ms formal
comenzaremos con un ejemplo en el leguaje de espaol.
Reglas gramaticales:
1. <sentencia>::=<sujeto><predicado>
2. <sujeto>::=<articulo><nombre>
3. <predicado>::=<verbo><complemento>
4. <predicado>::=<verbo>
5. <articulo>::=el
6. <articulo>::=la
7. <nombre>::=perro
8. <nombre>::=gata
9. <verbo>::=corre
10. <verbo>::=come
11. <complemento>::=deprisa
12. <complemento>::=mucho
El objetivo es llegar a tener una secuencia correcta de smbolos (en este caso son: el, la,
perro, gata, etc.) partiendo de un determinado smbolo, que llamamos inicial,
(<sentencia> en el caso del ejemplo), y utilizando algunas de las reglas definidas.
A estas reglas se les conoce tambin como producciones o reglas de derivacin. Una
produccin definida sobre un alfabeto , es el par ordenado de palabras (x,y) donde x,y
*, y se representa x ::= y. Se dice que x es la parte izquierda de la produccin y que y es la
parte derecha.
Definicin de gramtica formal
Se llama gramtica formal definida sobre un alfabeto a una tupla de la forma G = ( T, N,
S, P ) donde:
T es el alfabeto de smbolos terminales
N es el alfabeto de smbolos no terminales
S es el smbolo inicial de la gramtica
P es un conjunto de producciones
Hay que tener en cuenta que:
S N
N T =
= N U T

10

Ejemplo:
G = ( {c,d}, {S,A,T}, S, P ), P= { S ::= | cA, A ::= d | cA | Td, T ::= Td | d }
Clasificacin de las gramticas formales
Noam Chomsky clasific las gramticas en cuatro grupos (Tipo 0, 1 ,2 y 3) donde cada uno
contiene al siguiente. La diferencia entre cada grupo se centra en la forma de las
producciones. La misma clasificacin puede ser aplicada a los lenguajes, es decir, los
lenguajes de tipo 0 son los generados por las gramticas de tipo 0 y as sucesivamente.
Gramticas tipo 0
Tambin se les llama gramticas sin restricciones o recursivamente enumerables. Las
producciones de este tipo de gramticas tienen la forma:
xAy ::= v donde A N, x,y,v *
Ejemplo:
AB1::=01BC, 1A::=DE0, B::=01, D::=0C, EA::=1
Qu pasa si agregamos la regla E::= ?
Gramticas tipo 1
Tambin se les llama gramticas dependientes del contexto. Las producciones de este tipo
de gramticas tienen la forma:
xAy ::= xvy donde A N, x,y *, v +
Todas las gramticas de tipo 1 son tambin gramticas de tipo 0, pero en este caso hay
una restriccin aadida y es que no debe ser decreciente, es decir, no debe contener
producciones o reglas compresoras.
Se dice que una produccin es compresora si la longitud de su parte derecha es menor
que la de la parte izquierda.
Ejemplo:
S::=aAB |aB, B::=Dc, CD::=CE, DE::=Dc, A::=aAC | aC, D::=b, CE::=DE, Cc::=Dcc
Si agregamos la regla EA::=c deja de ser tipo 1 y se convierte en tipo 0, ya que esta regla es
una regla compresora. |c| < |EA|
Qu pasa si agregamos la regla E::= ?
Gramticas tipo 2
Tambin se les llama gramticas libres de contexto o independientes de contexto. Las
producciones de las gramticas tipo 2 son an ms restrictivas que las de tipo 1. En este
caso, la parte izquierda de la produccin est formada por un nico smbolo no terminal,
por lo tanto las producciones tienen la forma:
A ::= v donde A N, v *
Todas las gramticas de tipo 2 son tambin gramticas de tipo 1. En este tipo de
gramticas, la conversin de A en v se realiza independientemente del contexto en que se
encuentre A, de ah su nombre.
11

Ejemplo:
S::=aAB |aB, B::=Dc, D::=CE | b, E::=Dc, A::=aAC | aC, C::=DEAa
Qu pasa si agregamos la regla E::= ?
Gramticas tipo 3
Son el grupo ms restringido de las gramticas y tambin se les conoce con el nombre de
gramticas regulares.
Al igual que las gramticas tipo 2, este tipo de gramticas tiene la restriccin de que la
parte izquierda de la produccin debe estar formada por un nico smbolo no terminal,
pero adems se aaden restricciones en la parte derecha de las producciones, que
debern estar formadas por mximo dos smbolos.
Hay dos tipos de gramticas regulares y sus producciones pueden ser de la siguiente
forma:
1. Gramticas lineales por la derecha (GLD):
A ::= a, A ::= aV, S ::=
dnde A,V,S N, a T y S es el smbolo inicial de la gramtica
2. Gramticas lineales por la izquierda (GLI):
A ::= a, A ::= Va, S ::=
dnde A,V,S N, a T y S es el smbolo inicial de la gramtica
Estos dos grupos de gramticas tienen el mismo poder generativo, es decir, cualquier
lenguaje de tipo 3 o lenguaje regular puede ser generado tanto por una gramtica lneal
por la derecha como por una lineal por la izquierda.
Es importante mencionar que en una gramtica tipo 3 no puede existir combinacin de
reglas lineales por la derecha y lineales por la izquierda, si esto sucede la gramtica es tipo
2.
Ejemplo:
S::=aA |aB, A::=aB | a, B::=b
S es el smbolo inicial de la gramtica
Qu pasa si agregamos la regla B::= ? Qu pasa si agregamos la regla S::= ?
Cmo sera la gramtica lineal por la izquierda?
Lenguaje generado por una gramtica
Sea una gramtica definida como G = { T, N, S, P } llamamos lenguaje generado por dicha
gramtica a L = { x T* | S
x}.

12

Por lo tanto, las palabras del lenguaje estarn formadas por cadenas de smbolos
terminales generadas a partir del smbolo inicial de la gramtica, utilizando las
producciones que la definen.
Gramticas equivalentes
Dos gramticas son equivalentes cuando generan el mismo lenguaje. Es evidente que,
para que esto suceda, deben estar definidas sobre el mismo T.
Caracterizacin de una gramtica - Cmo determinar el lenguaje que genera una
gramtica?
Consiste en expresar las caractersticas del lenguaje producido por una gramtica,
preferentemente por medio de una expresin formal, o bien, por medio de enunciados en
lenguaje natural si lo anterior no es posible.
No existen mtodos generales para caracterizar los lenguajes pero se debe tener en
cuenta el orden en el que se aplicaran las composiciones y cuntas veces se usara cada
una de ellas. La caracterizacin es una derivacin general, que abarca todas las posibles
derivaciones en particular.
Ejemplo:
Caracterizar u obtener la el lenguaje que genera la gramtica
G = { {a,b}, {S}, S, {S::=ab|aSb} }
S =>

ab
aSb

=>

aabb
aaSbb =>

aaabbb
aaaSbbb

=>

anbn donde n>0

El lenguaje que genera es:


L(G) = {anbn | n > 0 }
Se recomienda usar rboles o cadenas de derivacin para hacer el proceso ms sencillo.
rboles y cadenas de derivacin
Cadenas de derivacin
Las derivaciones o cadenas de derivacin se utilizan para inferir las palabras que
pertenecen a un lenguaje. En stas, el smbolo inicial se expande utilizando una de sus
producciones (es decir, mediante una produccin cuya cabeza sea el smbolo inicial). A
continuacin, expandimos la cadena resultante reemplazando uno de los smbolos no
terminales por el lado derecho de una de sus producciones, y as sucesivamente, hasta
obtener una cadena compuesta totalmente por smbolos terminales.

13

Ejemplo:
Sea la gramtica definida por G = ({E,I},{a,b,0,1},R,E), con las reglas de produccin
siguientes, que produce cadenas de expresiones algebraicas que involucran suma y
multiplicacin.
EI
EE+E
EEE
E (E)
Ia
Ib
I Ia
I Ib
I I0
I I1
Dada la palabra ( + 00), es posible encontrar una derivacin a partir de la variable
E, como se muestra en la siguiente cadena de derivacin.
() ( + ) ( + ) ( + )
( + ) ( + 0) ( + 00) ( + 00)
Derivacin izquierda y derecha

Con el fin de restringir el nmero de opciones disponibles en la derivacin de una cadena,


a menudo resulta til requerir que en cada paso se reemplace la variable ms a la
izquierda por uno de los cuerpos de sus producciones. Tal derivacin se conoce como

derivacin por izquierda, la cual se indica mediante las relaciones y , para uno o ms

pasos, respectivamente.
De forma similar, se puede hacer que en cada paso se reemplace la variable ms a la
derecha por uno de los cuerpos de sus producciones. En este caso, se trata de una

derivacin por la derecha y se utilizan y para indicar una o ms derivaciones por la

derecha, respectivamente.
Ejemplo derivacin por la izquierda (tomando la gramtica de la pgina anterior):
E E E I E a E a (E) a (E + E) a (I + E) a (a + E)
lm

lm

lm

lm

lm

lm

lm

a (a + I) a (a + I0) a (a + I00) a (a + b00)


lm

lm

lm

lm

Ejemplo derivacin por la derecha (tomando la gramtica de la pgina anterior):


14

() ( + ) ( + ) ( + 0) ( + 00)

( + 00) ( + 00) ( + 00) ( + 00) ( + 00)

Estas dos derivaciones son importantes porque cualquier analizador sintctico o


compilador (es decir, un programa que trata de construir una derivacin para una palabra
dada) debe utilizar una de ellas.
rboles de derivacin
Existe una representacin de rbol para las derivaciones que ha demostrado ser
extremadamente til. Este rbol muestra claramente cmo se agrupan los smbolos de
una cadena terminal en subcadenas, que pertenecen al lenguaje de una de las variables
de la gramtica. Pero lo ms importante es que el rbol, conocido como rbol de
derivacin, cuando se emplea en un compilador, es la estructura de datos que representa
el programa fuente. En un compilador, la estructura del rbol del programa fuente facilita
la traduccin del programa fuente a cdigo ejecutable permitiendo que el proceso de
traduccin sea realizado por funciones naturales recursivas.
Sea G = (V,T,P,S) una gramtica. Los rboles de derivacin para G son aquellos rboles que
cumplen las condiciones siguientes:
1. Cada nodo interior est etiquetado con una variable de V .
2. Cada hoja est etiquetada con una variable, un smbolo terminal o . Sin embargo,
si la hoja est etiquetada con , entonces tiene que ser el nico hijo de su padre.
3. Si un nodo interior est etiquetado como A y sus hijos estn etiquetados como: X 1,
X2, ..., Xk respectivamente, comenzando por la izquierda, entonces A ::= X1, X2, ...Xk
es una produccin de P. Observe que el nico caso en que una de las X puede
reemplazarse por es cuando dicha X contiene un nico hijo y A es una
produccin de G.
El rbol de derivacin de la expresin ( + 00) se muestra a continuacin:

15

16