Вы находитесь на странице: 1из 8

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.

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

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 variable 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 . Es decir, cualquier cadena se
G *

A , o si solo estamos trabajando con G que A . Un paso de derivacin reemplaza cualquier G

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.

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 w.
*

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

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
*

w}.
G

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 es
G *

una forma sentencial. Si S , entonces es una forma sentencial por la izquierda y si S entonces es una forma
lm rm

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 gramtica del ejemplo 5.5, que utiliza las reglas de produccin E E + E y E I. Ejemplo 5.10. rbol de derivacin que usa la gramtica de los palndromos, que usa las producciones P 0P0, 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 w.
lm * * *

4. A w.
rm

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 Entonces existe una derivacin ms a la derecha A

w en la gramtica G.
lm *

w en la gramtica G.
rm * G

Teorema 5.18. Sea G = (V, T, P, S) una GIC, y supongamos que existe una derivacin A 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.