You are on page 1of 10

Captulo 5: Lenguajes y gramticas independientes del contexto

5.1 Gramticas independientes del contexto


5.1.1 Un ejemplo informal
5.1.2 Definicin de las gramticas independientes del contexto
5.1.3 Derivaciones utilizando una gramtica
5.1.4 Derivaciones izquierda y derecha
5.1.5 Lenguaje de una gramtica
5.1.6 Formas sentenciales
5.2 rboles de derivacin
5.2.1 Construccin de los rboles de derivacin
5.2.2 Resultado de un rbol de derivacin
5.2.3 Inferencia, derivaciones y rboles de derivacin
5.3 Aplicaciones de las gramticas independientes del contexto
5.3.1 Analizadores sintcticos
5.4 Ambigedad

Captulo 5: Lenguajes y gramticas independientes del contexto

5.1 Gramticas independientes del contexto

5.1.1 Un ejemplo informal

Consideremos el lenguaje de los palndromos. Una cadena w es un palndromo si y slo si w = wR. Consideremos
nicamente los palndromos descritos con el alfabeto {0, 1}. El lenguaje Lpal de los palndromos formados por ceros y unos
no es un lenguaje regular, segn se demuestra por el lema del bombeo, con la contante n y w = 0n10n. Existe una definicin
recursiva y natural que nos dice cundo una cadena de ceros y unos pertenece a Lpal. Se parte de un caso bsico
estableciendo que unas cuantas cadenas obvias pertenecen a Lpal, y luego se aplica la idea de que si una cadena es un
palndromo, tiene que comenzar y terminar con el mismo smbolo. Adems, cuando el primer y ltimo smbolo se
eliminan, la cadena resultante tambin tiene que ser un palndromo. Es decir,
Base. , 0 y 1 son palndromos.
Paso inductivo. Si w es un palndromo, tambin lo son 0w0 y 1wl. Ninguna cadena es un palndromo de ceros y unos, a
menos que cumpla el caso base y esta regla de induccin.

Una gramtica independiente del contexto es una notacin formal que sirve para expresar las definiciones recursivas de
los lenguajes. Una gramtica consta de una o ms variables que representan las clases de cadenas, es decir, los lenguajes.
En este ejemplo slo necesitamos una variable P, que representa el conjunto de palndromos; sta es la clase de cadenas que
forman el lenguaje Lpal. Existen reglas que establecen cmo se construyen las cadenas de cada clase. La construccin puede
emplear smbolos del alfabeto, cadenas que se sabe que pertenecen a una de las clases, o ambos elementos.

Ejemplo 5.1. Las reglas que definen los palndromos, expresadas empleando la notacin de la gramtica independiente del
contexto son:
Las tres primeras reglas definen el caso bsico. Establecen que la clase de
palndromos incluye las cadenas , 0 y 1. Ninguno de los lados de la derecha de
estas reglas (la parte que sigue a las flechas) contiene una variable, razn por la
que constituyen el caso bsico de la definicin. Las dos ltimas reglas forman la
parte inductiva de la definicin.

5.1.2 Definicin de las gramticas independientes del contexto

Existen cuatro componentes importantes en una descripcin gramatical de un lenguaje:

l. Un conjunto finito de smbolos que forma las cadenas del lenguaje que se est definiendo; denominamos a este
conjunto alfabeto terminal o alfabeto de smbolos terminales. En ejemplo 5.1: {0,1}.

2. Un conjunto finito de variables, denominado tambin en ocasiones smbolos no terminales o categoras sintcticas.
Cada variable representa un lenguaje; es decir, un conjunto de cadenas. En ejemplo 5.1: {P}.

3. Una de las variables representa el lenguaje que se est definiendo; se denomina smbolo inicial. Otras variables
representan las clases auxiliares de cadenas que se emplean para definir el lenguaje del smbolo inicial. En ejemplo 5.1 P
es la variable Inicial.

1
4. Un conjunto finito de producciones o reglas que representan la definicin recursiva de un lenguaje. Cada produccin
consta de:
a) Una variable a la que define (parcialmente) la produccin. Esta variable a menudo se denomina cabeza de la
produccin.
b) El smbolo de produccin .
c) Una cadena formada por cero o ms smbolos terminales y variables. Esta cadena, denominada cuerpo de la
produccin, representa una manera de formar cadenas pertenecientes al lenguaje de la variable de la cabeza. De este
modo, dejamos los smbolos terminales invariables y sustituimos cada una de las variables del cuerpo por una cadena
que sabemos que pertenece al lenguaje de dicha variable.

Estos cuatro componentes definen una gramtica independiente del contexto, (GIC), o simplemente una gramtica, o en
ingls CFG, context-free grammar. G = (V, T, P, S) representa una GIC G, donde V es el conjunto de variables, T son los
smbolos terminales, P es el conjunto de producciones y S es el smbolo inicial.

Ejemplo 5.2. La gramtica Gpal para los palndromos se representa: Gpal = ({P}, {0, 1}, A, P), donde A representa el
conjunto de las cinco producciones mostradas.

Ejemplo 5.3. La siguiente GIC representa una simplificacin de las expresiones de un lenguaje de programacin tpico.
Vamos a limitarnos a los operadores + y *. Establecemos que los argumentos sean identificadores. Todo identificador debe
comenzar por a o b, y deber ir seguido por cualquier cadena perteneciente a {a, b, 0, l}*. En esta gramtica necesitamos
dos variables. E, representa expresiones, se trata del smbolo inicial y representa el lenguaje de las expresiones que se van a
definir. La otra variable, I, representa los identificadores. Su lenguaje, que es regular, es el de la expresin regular: (a + b)(a
+ b + 0 + l )*.

No vamos a emplear expresiones regulares


directamente en las gramticas. En lugar de ello,
utilizaremos un conjunto de producciones que
prcticamente es lo mismo que una expresin regular. La
gramtica para expresiones se define formalmente como
G = ({E, I}, T, P, E), donde T es el conjunto de smbolos
{+, *, (, ), a, b, 0, l} y P es el conjunto de producciones
mostrado en la figura:

5.1.3 Derivaciones utilizando una gramtica

Aplicamos las producciones de una GIC para inferir que determinadas cadenas pertenecen al lenguaje de una cierta
variable. Para llevar a cabo esta inferencia hay disponibles dos mtodos.

El primero consiste en emplear las reglas para pasar del cuerpo a la cabeza: tomamos cadenas que sabemos que
pertenecen al lenguaje de cada una de las variables del cuerpo, las concatenamos en el orden apropiado con cualquier
smbolo terminal que aparezca en el cuerpo e inferimos que la cadena resultante pertenece al lenguaje de la variable de la
cabeza. Este procedimiento lo denominaremos inferencia recursiva.

El otro mtodo que permite definir el lenguaje de una gramtica es en el que se emplean las producciones desde la
cabeza hasta el cuerpo. El smbolo inicial se expande utilizando una de sus producciones. A continuacin, expandimos la
cadena resultante reemplazando una de las variables por el cuerpo de una de sus producciones, y as sucesivamente, hasta
obtener una cadena compuesta totalmente por terminales. El lenguaje de la gramtica son todas las cadenas de terminales
que se pueden obtener de esta forma. Este uso de las gramticas se denomina derivacin.

Ejemplo 5.4. Aqu se muestran algunas cadenas


obtenidas mediante inferencia recursiva de la gramtica
del ejemplo 5.3

2
El proceso de derivacin de cadenas aplicando producciones desde la cabeza hasta el cuerpo requiere la definicin de un
nuevo smbolo de relacin . Supongamos que G = (V, T, P, S) es una GIC. Sea A una cadena de smbolos terminales
y variables, siendo y cadenas de (V + T)* y A una variable. Sea A una produccin de G. Entonces decimos que
A , o si solo estamos trabajando con G que A . Un paso de derivacin reemplaza cualquier variable
G

de cualquier parte de la cadena por el cuerpo de una de sus producciones. Podemos extender la relacin para
representar cero, uno o ms pasos de derivaciones, utilizaremos el smbolo * para indicar "cero o ms pasos", como sigue:
*
Base. Para cualquier cadena de smbolos terminales y variables, decimos que
G
. Es decir, cualquier cadena se
deriva de s misma.
* *
Paso inductivo. Si y se cumple .
G G G
* *
Si la gramtica G se sobreentiende, entonces empleamos en lugar de
G
.
Ejemplo 5.5. La inferencia de que a*(a + b00) est en el lenguaje de la variable E se puede reflejar en una derivacin de
dicha cadena, partiendo de la cadena E.

3
Se han seguido las producciones 3, 1, 5, 4, 2, 1, 5, 1, 9, 9, 6.
* *
Podemos emplear la relacin para condensar la derivacin: E a*(a + b00). Los dos puntos de vista, inferencia
recursiva y derivacin, son equivalentes. Es decir, se infiere que una cadena de smbolos terminales w pertenece al lenguaje
*
de cierta variable A si y slo si A w.

Notacin compacta para producciones


Es conveniente pensar que una produccin "pertenece" a la variable que aparece en su cabeza. A menudo se usar "las
producciones de A" o "producciones-A" para hacer referencia a las producciones cuya cabeza es la variable A. Otra
forma de escribir varias producciones pertenecientes a la misa variable, A1, A2 A3n es A1|2||n.

Notacin para las derivaciones de las GIC


1. Las letras minsculas del principio del alfabeto (a, b,), dgitos y otros caracteres como el signo ms (+) o los
parntesis son smbolos terminales.
2. Las letras maysculas del principio del alfabeto (A, B) son variables.
3. Las letras minsculas del final del alfabeto, como w o z, son cadenas de smbolos terminales.
4. Las letras maysculas del final del alfabeto, como X o Y, son smbolos terminales o variables.
5. Las letras griegas minsculas, como y , son cadenas formadas por smbolos terminales y/o variables.

5.4 Derivaciones izquierda y derecha

Con el fin de clarificar la sustitucin realizada en una derivacin, a menudo se obliga a que la variable reemplazada sea
la situada ms a la izquierda; dicha derivacin se denomina derivacin ms a la izquierda, y se representa mediante o
lm
* *
. Tambin se puede hacer por la derecha, con la derivacin ms a la derecha representada mediante o .
lm rm rm

Ejemplo 5.6. Se realizar la misma derivacin que en el ejemplo 5.6, pero por la izquierda y por la derecha:

Para cualquier derivacin existe una derivacin ms a la izquierda equivalente y una derivacin ms a la derecha
equivalente.

5.1.5 Lenguaje de una gramtica

Si G(V, T, P, S) es una GIC, el lenguaje de G, designado como L(G), es el conjunto de cadenas terminales que tienen
*
derivaciones desde el smbolo inicial. Es decir, L(G) = {w pertenece a T* | S
G
w}.
Si un lenguaje L es el lenguaje de cierta gramtica independiente del contexto, entonces se dice que L es un lenguaje
independiente del contexto o LIC (CFL, context-free language).

5.1.6 Formas sentenciales

Las derivaciones a partir del smbolo inicial producen cadenas que desempean un papel especial y se conocen como
*
"formas sentenciales". Es decir, si G = (V, T, P, S) es una GIC, entonces cualquier cadena de (V U T)* tal que S
G
es
* *
una forma sentencial. Si S
lm
, entonces es una forma sentencial por la izquierda y si S
rm
entonces es una forma
sentencial por la derecha. Observe que el lenguaje L(G) est formado por aquellas formas sentenciales que pertenecen a T*,
es decir, que solamente constan de smbolos terminales.

Ejemplo 5.8. Considere la gramtica para las expresiones del ejemplo 5.5. Por ejemplo, E*(I + E) es una forma sentencial,
dado que existe una derivacin: , aunque no es una derivacin ms a la
izquierda ni a la derecha, ya que en el ltimo paso se sustituye la variable central. Ejemplos de formas sentenciales por la
izquierda o la derecha seran:

5.2 rboles de derivacin

Existe una representacin de rbol para las derivaciones. 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.

5.2.1 Construccin de los rboles de derivacin

Sea G = (V, T, P, S) una gramtica. Los rboles de derivacin para G son aquellos rboles que cumplen las condiciones
siguientes:

l. Cada nodo interior (con hijo/s) est etiquetado con una variable de V.

2. Cada hoja est etiquetada bien 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: X1, X2,, Xk respectivamente,
comenzando por la izquierda, entonces A X1X2Xk es una produccin de P. Observe que el nico caso en que una de
las X puede reemplazarse por es cuando es la etiqueta del nico hijo y A es una produccin de G.

Ejemplo 5.9. rbol de derivacin que utiliza la Ejemplo 5.10. rbol de derivacin que usa la gramtica
gramtica del ejemplo 5.5, que utiliza las reglas de de los palndromos, que usa las producciones P 0P0,
produccin E E + E y E I. P 1P1, P .

5.2.2 Resultado de un rbol de derivacin

Si nos fijamos en las hojas de cualquier rbol de derivacin y las concatenamos empezando por la izquierda, obtenemos
una cadena denominada resultado del rbol, que siempre es una cadena que se deriva de la variable raz. Aquellos rboles
de derivacin tales que: el resultado es una cadena terminal, es decir, todas las hojas estn etiquetadas con un smbolo
terminal o con , y la raz est etiquetada con el smbolo inicial, son los rboles de derivacin cuyos resultados son cadenas
pertenecientes al lenguaje de la gramtica subyacente.

Ejemplo 5.11. rbol con una cadena terminal como


resultado y el smbolo inicial en la raz, basado en la
gramtica de expresiones del ejemplo 5.5, y cuyo
resultado es la cadena a * (a + b00). Este rbol de
derivacin es una representacin de dicha derivacin.

5.2.3 Inferencia, derivaciones y rboles de derivacin

Dada una gramtica G = (V, T, P, S), las siguientes afirmaciones son equivalentes:
1. La inferencia recursiva determina que la cadena terminal w pertenece al lenguaje de la variable A.
*
2. A w.
*
3. A
lm
w.
*
4. A
rm
w.

5. Existe un rbol de derivacin cuya raz es A y cuyo resultado es w.

Excepto para el uso de la inferencia recursiva, que slo hemos definido para cadenas terminales, todas las dems
condiciones tambin son equivalentes si w es una cadena que contiene variables.

La siguiente figura muestra un esquema de demostracin de todas estas equivalencias; cada arco del diagrama indica que
existe un teorema que establece que si w cumple la condicin en la cola del arco, entonces tambin la cumple en el origen
del mismo.

Teorema 5.12. Sea G = (V, T, P, S) una GIC. Si el procedimiento de la inferencia recursiva nos dice que la cadena terminal
w pertenece al lenguaje de la variable A, entonces existe un rbol de derivacin con raz A y resultado w.

Teorema 5.14, 5.16. Sea G = (V, T, P, S) una GIC y supongamos que existe un rbol de derivacin con una raz etiquetada
con la variable A y resultado w, donde w pertenece a T*.
*
Entonces existe una derivacin ms a la izquierda A
lm
w en la gramtica G.
*
Entonces existe una derivacin ms a la derecha A
rm
w en la gramtica G.
*
Teorema 5.18. Sea G = (V, T, P, S) una GIC, y supongamos que existe una derivacin A
G
w, donde W pertenece a T*.
Entonces el procedimiento de inferencia recursiva aplicado a G determina que w pertenece al lenguaje de la variable A.

5.3 Aplicaciones de las gramticas independientes del contexto

Aunque concebidas inicialmente para intentar describir los lenguajes naturales por N. Chomsky, posteriormente las GIC
se emplearon como una forma de describir instancias de conceptos definidos recursivamente en las ciencias de la
computacin. Unos de estos usos son:

1. Las gramticas se utilizan para describir lenguajes de programacin. Lo ms importante es que existe una forma
mecnica de convertir la descripcin del lenguaje como GIC en un analizador sintctico, el componente del compilador
que descubre la estructura del programa fuente y representa dicha estructura mediante un rbol de derivacin.

2. El desarrollo del XML, del cual una de sus partes fundamentales, el DTD (Document Type Definition) principalmente
es una gramtica independiente del contexto que describe las etiquetas permitidas y las formas en que dichas etiquetas
pueden anidarse.

5.3.1 Analizadores sintcticos

Muchos aspectos de un lenguaje de programacin tienen una estructura que puede describirse mediante expresiones
regulares. Sin embargo, tambin hay algunos aspectos importantes de los lenguajes de programacin tpicos que no pueden
representarse slo mediante expresiones regulares.

Ejemplo 5.19. Los lenguajes tpicos emplean parntesis y/o corchetes de forma equilibrada y anidada. Es decir, hay que
emparejar un parntesis abierto por la izquierda con el parntesis de cierre que aparece inmediatamente a su derecha,
eliminar ambos y repetir el proceso. Si al final se eliminan todos los parntesis, entonces la cadena estaba equilibrada y si
no se pueden emparejar los parntesis de esta manera, entonces es que estaba desequilibrada. Una gramtica Gbal = ({B}, {(,
)} , P, B) genera todas las cadenas de parntesis equilibrados (y nicamente stas), donde P consta de las producciones: B
BB | (B) | . El conjunto de cadenas de parntesis equilibrados no es un lenguaje regular, como puede demostrarse por el
lema del bombeo, considerando la cadena equilibrada w = (n)n, y descomponindola en xyz, y al quedarnos con xz, al menos
perderamos un parntesis abierto, con lo que la cadena no estara equilibrada y no pertenecera al lenguaje.

Muchos aspectos de un lenguaje de programacin tpico se comportan como los parntesis equilibrados, como los
elementos que marcan el principio y el final de los bloques de cdigo, como begin y end en Pascal, o las llaves {} en C.

Existe un caso que se presenta ocasionalmente en el que los "parntesis" pueden ser equilibrados, pero tambin pueden
existir parntesis abiertos no equilibrados. Un ejemplo sera el tratamiento de if y else en C. Puede existir una clusula if
desequilibrada o equilibrada por la clusula else correspondiente. Una gramtica que genera las secuencias posibles de if y
else (representadas por i y e, respectivamente) es: S | SS | iS | iSe.

Ejemplo 5.20. Consideremos la cadena iee. La primera e se corresponde con la i que haya su izquierda. Ambas se
eliminan, dejando la cadena e. Puesto que hay otro smbolo e, continuamos. Sin embargo, no hay una i a su izquierda, por
lo que iee no pertenece al lenguaje, lo mismo que ocurre en C, donde no podemos tener ms instrucciones else que if.
Veamos otro ejemplo, consideremos iieie. La primera e se corresponde con la i situada a su izquierda, y queda iie.
Emparejando la e que queda con la i de su izquierda, queda i. Ya no hay ms elementos e, por lo que la prueba se ha pasado
con xito.

5.4 Ambigedad en gramticas y lenguajes

Como hemos visto, las aplicaciones de las GIC a menudo confan en la gramtica para proporcionar la estructura de los
archivos. La suposicin tcita es que una gramtica determina de manera unvoca la estructura para cada cadena del
lenguaje. Sin embargo, veremos que no todas las gramticas proporcionan estructuras nicas. Cuando una gramtica falla
en proporcionar estructuras nicas, a veces es posible redisear la gramtica para hacer que la estructura sea nica para
cada cadena del lenguaje. Sin embargo, existen algunos lenguajes independientes del contexto que son "inherentemente
ambiguos"; cualquier gramtica para dicho lenguaje proporciona ms de una estructura a algunas cadenas del lenguaje.

5.4.1 Gramticas ambiguas

La gramtica de la construccin de expresiones aritmticas nos permite generar expresiones con cualquier secuencia de
los operadores * y + y las producciones E E + E | E * E nos permiten generar estas expresiones en cualquier orden que
elijamos.

Ejemplo 5.25. Consideremos la forma sentencial E + E * E. Existen dos derivaciones de E: 1. E E+E E + E * E;


2. E E * E E + E * E.

En la derivacin (1), la segunda E es reemplazada por E * E, mientras que en la derivacin (2), la primera E es
reemplazada por E + E.

La diferencia entre estas dos derivaciones es significativa. En lo que se refiere a la estructura de las expresiones, la
derivacin (1) establece que la segunda y la tercera expresiones se multiplican, y el resultado se suma a la primera
expresin, mientras que la derivacin (2) suma las dos primeras expresiones y multiplica el resultado por la tercera. La
primera de ellas, y no la segunda, se corresponde con nuestra idea de cmo agrupar correctamente las expresiones
aritmticas.

Dado que la gramtica proporciona dos estructuras diferentes para cualquier cadena de smbolos terminales que se haya
derivado reemplazando las tres expresiones de E + E * E por identificadores, vemos que esta gramtica no es adecuada
para proporcionar una estructura nica. En concreto, puede proporcionar cadenas con la agrupacin correcta como
expresiones aritmticas, pero tambin proporciona agrupaciones incorrectas. Para utilizar esta gramtica de expresiones en
un compilador, tendramos que modificarla de manera que slo proporcionara las agrupaciones correctas.

Por otro lado, la mera existencia de diferentes derivaciones para una cadena (en oposicin a diferentes rboles de
derivacin) no implica que la gramtica sea defectuosa.
Ejemplo 5.26. Utilizando la misma gramtica de expresiones, vamos a determinar que la cadena a + b tiene muchas
derivaciones diferentes, por ejemplo: 1. E E + E I + E a + E a + I a + b; 2. E E + E E + I
E + b I + b a + b. Sin embargo, no existe ninguna diferencia real entre las estructuras proporcionadas por
estas derivaciones; ambas especifican que a y b son identificadores y que sus valores deben sumarse. De hecho, ambas
derivaciones dan como resultado el mismo rbol de derivacin.

Los dos ejemplos anteriores sugieren que no es la multiplicidad de derivaciones lo que causa la ambigedad, sino la
existencia de dos o ms rboles de derivacin. Por tanto, decimos que una GIC G = (V, T, P, S) es ambigua si existe al
menos una cadena w de T* para la que podemos encontrar dos rboles de derivacin diferentes, teniendo cada uno de ellos
una raz S y un resultado w. Si cada una de las cadenas tiene como mximo un rbol de derivacin en la gramtica,
entonces la gramtica es no ambigua.

Existen algunas derivaciones ambiguas que pueden ser transformadas para dejar de serlo, mientras que otras son
inherentemente ambiguas.

5.4.3 Derivaciones ms a la izquierda como forma de expresar la ambigedad

Las derivaciones no son necesariamente nicas, incluso aunque la gramtica no sea ambigua; no obstante, en una
gramtica no ambigua, tanto las derivaciones ms a la izquierda como las derivaciones ms a la derecha sern nicas.

Teorema 5.29. Para cada gramtica G = (V, T, P, S) y cadena w de T*, w tiene dos rboles de derivacin distintos si y slo
si w tiene dos derivaciones a la izquierda distintas desde S.

5.4.4 Ambigedad inherente

Un lenguaje independiente del contexto L se dice que es inherentemente ambiguo si todas sus gramticas son ambiguas.
Si una sola gramtica de L es no ambigua, entonces L no es un lenguaje ambiguo.

El lenguaje L = {anbncmdm | n 1, m 1} U {anbmcmdn | n 1, m 1} es inherentemente ambiguo. Una gramtica sera:

5.5 Resumen del Captulo 5

+ Gramticas independientes del contexto. Una GIC es una forma de describir lenguajes mediante reglas recursivas
denominadas producciones. Una GIC consta de un conjunto de variables, un conjunto de smbolos terminales y una
variable inicial, as como de producciones. Cada produccin consta de una variable de cabeza y un cuerpo formado por una
cadena de cero o ms variables y/o smbolos terminales.

+ Derivaciones y lenguajes. Partiendo del smbolo inicial, derivamos las cadenas terminales sustituyendo de forma repetida
una variable por el cuerpo de una produccin cuya cabeza sea dicha variable. El lenguaje de la GIC es el conjunto de las
cadenas terminales que podemos derivar de esta manera y se dice que es un lenguaje independiente del contexto.

+ Derivaciones ms a la izquierda y ms a la derecha. Si siempre sustituimos la variable ms a la izquierda (ms a la


derecha) en una cadena, entonces la derivacin resultante es una derivacin ms a la izquierda (ms a la derecha). Toda
cadena de un lenguaje de una GIC tiene al menos una derivacin ms a la izquierda y una derivacin ms a la derecha.

+ Formas sentenciales. Cualquier paso en una derivacin da lugar una cadena de variables y/o smbolos terminales. Si
parte del smbolo inicial denominamos a la cadena forma sentencial. Si la derivacin es ms a la izquierda (o ms a la
derecha), entonces la cadena es una forma sentencial por la izquierda (o por la derecha).

+ rboles de derivacin. Un rbol de derivacin es un rbol que muestra los fundamentos de una derivacin. Los nodos
internos se etiquetan con variables y las hojas se etiquetan con smbolos terminales o . Para cada nodo interno, tiene que
existir una produccin tal que la cabeza de la misma es la etiqueta del nodo y las etiquetas de sus hijos, ledas de izquierda
a derecha, forman el cuerpo de dicha produccin.

+ Equivalencia de rboles de derivacin y derivaciones. Una cadena terminal pertenece al lenguaje de una gramtica si y
slo si es el resultado de al menos un rbol de derivacin. Luego la existencia de derivaciones ms a la izquierda,
derivaciones ms a la derecha y rboles de derivacin son condiciones equivalentes que definen de forma exacta las
cadenas pertenecientes al lenguaje de una GIC.
+ Gramticas ambiguas. Para algunas GIC, es posible determinar una cadena terminal con ms de un rbol de derivacin,
o lo que es lo mismo, ms de una derivacin ms la izquierda o ms de una derivacin ms a la derecha. Una gramtica as
se dice que es una gramtica ambigua.

+ Eliminacin de la ambigedad. Para muchas gramticas tiles, como aquellas que describen la estructura de programas
en un lenguaje de programacin tpico, es posible determinar una gramtica no ambigua que genere el mismo lenguaje.
Lamentablemente, la gramtica no ambigua frecuentemente es ms compleja que la gramtica ambigua ms simple para el
lenguaje. Tambin existen algunos lenguajes independientes del contexto, habitualmente bastante artificiales, que son
inherentemente ambiguos, lo que significa que cualquier gramtica de dicho lenguaje es ambigua.

+ Analizadores sintcticos. Las gramticas independientes del contexto describen un concepto fundamental para la
implementacin de compiladores y otros procesadores de lenguajes de programacin.

+ DTD, definiciones de tipos de documentos. El estndar XML para compartir informacin a travs de documentos Web
utiliza una notacin, conocida como DTD, que permite describir la estructura de dichos documentos mediante el
anidamiento de etiquetas semnticas dentro del documento. Las DTD son en esencia gramticas independientes del
contexto cuyo lenguaje es una clase de documentos relacionados.