You are on page 1of 12

Gramáticas Libres de Contexto

Universidad Iberoamericana (UNIBE) Escuela de Ingeniería en Tecnologías de la Información y Comunicación

Anaury Batista 11-1146

Lenguajes Formales y Teorías de Autómata Profesora: Rina Familia

Periodo 2013-3 Lunes 25 de Noviembre del 2013 Gramáticas Libres de Contexto Abstract Una Gramática Libre de Contexto es un conjunto finito de variables, cada una de las cuales representa un lenguaje. Las gramáticas libre de contexto permite describir la mayoría de los lenguajes de programación, de hecho, la sintaxis de la mayoría de lenguajes de programación está definida mediante gramática libres de contexto.

1

Gramáticas Libres de Contexto

Introducción
La gramática es un conjunto finito de símbolos o variables que representan categorías aplicables a elementos de léxico. Las gramáticas libre de contexto son las que nos permite describir la mayoría de los lenguajes de programación, de hecho, la sintaxis de la mayoría de lenguajes de programación está definida mediante gramática libres de contexto. La gramática libre de contexto es muy útil para definir relaciones entre objetos sintácticos tales como la sintaxis de un lenguaje de programación. Una gramática libre de contexto tiene un símbolo de arranque o de objetivo. Son símbolos terminales que representan ejemplos de variables y son reglas de producción que combinan entre sí para el logro del objetivo. Como la gramática libre de contexto es un tema que nos incumbe a cada persona que utilizamos lenguajes de programación, que estudiamos informática, en este trabajo de investigación se desarrollara este tema, para así tener unos conocimientos más amplios del mismo. Entender que es y de qué forma se utiliza.

2

Gramáticas Libres de Contexto

Gramáticas Libres de Contexto

¿Qué es una gramática? • • • Modelo de estructuras recursivas. Definición de reglas para representar las expresiones de los lenguajes. Especificación rigurosa y explicita de estructura de un lenguaje.

Características: • • • • • Ausencia de ambigüedad, por tanto bien definidas. Rigurosas (claridad, explicitud). Facilitan evaluación: comprobar, conclusiones, derivar. Hacer predicciones: generalización. Desarrollo de aplicaciones.

Gramáticas Formales • • • • Gramática regulares. Gramáticas independientes de contexto. Gramáticas sensibles al contexto. Gramática sin restricciones o de estructura de frase.

Tipos de Gramáticas • N. Chomsky clasifica las gramáticas en cuatro tipos: o Gramáticas sin restricciones o gramáticas de estructura de frases (Tipo 0). o Gramáticas sensibles al contexto (Tipo 1). o Gramáticas independientes de contexto (Tipo 2). o Gramáticas regulares (Tipo 3).

3

Gramáticas Libres de Contexto
Definición Formal Una Gramática Libre de Contexto se denota por una 4-tupla G = (V, T, P, S), donde V y T son conjuntos finitos de variables y terminales, respectivamente. Asumimos que V y T son disjuntos. P es un conjunto finito de producciones; cada producción es de la forma A→ α, donde A es una variable y α es una cadena de símbolos en (V U T)*. Finalmente, S es una variable especial llamada el símbolo de inicio. También se puede decir que: • • • • V es un conjunto de variables. T es un conjunto de terminales. P es un conjunto finito de producciones de la forma A → α, donde A es una variable y α ∈ (V ∪ T)*. S es una variable designada llamada el símbolo inicial.

Las gramáticas se especifican dando una lista de sus producciones, donde las producciones del símbolo inicial se listan primero. Las producciones con el mismo no terminal del lado izquierdo pueden tener sus lados derechos agrupados, separados por es símbolo |. Se dice que una producción es para un no terminal si el no terminal aparece en el lado izquierdo de la producción. Ejemplo: Usamos E en lugar de <expresión> para la siguiente gramática:

Entonces formalmente esta gramática se expresa como ({E}, {+, *, (,), id}, P, E). Según la Jerarquía de Chomsky: las gramáticas generativas se clasifican en 4 tipos. Esta clasificación es inclusiva, es decir tipo 3 ⊂ tipo 2 ⊂ tipo 1 ⊂ tipo 0.

4

Gramáticas Libres de Contexto

Gramáticas Libres de Contexto Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto. Los lenguajes libres del contexto son aquellos que pueden ser reconocidos por un autómata de pila determinístico o no determinístico. Una Gramática Libre de Contexto es un conjunto finito de variables, cada una de las cuales representa un lenguaje. Los lenguajes representados por las variables se describen recursivamente en términos de otros lenguajes o de símbolos primitivos llamados terminales. Las reglas que describen el lenguaje asociado con cada variable se llaman producciones. La motivación original para las gramáticas libres de contexto fue la descripción de lenguajes naturales tal como ocurre con las siguientes reglas:

Donde las variables se escriben dentro de corchetes angulares y las terminales son por ejemplo, la palabra “niño”. El término libre de contexto se refiere al hecho de que el no terminal V puede siempre ser sustituido por W sin tener en cuenta el contexto en el que ocurra.

5

Gramáticas Libres de Contexto
Las gramáticas libre de contexto permite describir la mayoría de los lenguajes de programación, de hecho, la sintaxis de la mayoría de lenguajes de programación está definida mediante gramática libres de contexto. Hemos visto que muchos lenguajes no son regulares. Un lenguaje formal es libre de contexto si hay una gramática libre de contexto que lo genera. Por lo que se necesita una clase más grande de lenguajes. Las Gramáticas Libres de Contexto jugaron un papel central en los lenguaje natural desde los 50’s y en los compiladores desde los 60’s. Forman la base de la sintaxis BNF. Son actualmente importantes para XML y sus DTD’s (Document Type Definition). Se usan las siguientes convenciones con respecto a las gramáticas: • • • • • Las letras mayúsculas A, B, C, D, E y S denotan variables; y el S es el símbolo de inicio. Las letras minúsculas a, b, c, d, e, dígitos, y cadenas en letras negrillas son terminales. Las letras mayúsculas X, Y, y Z denotan símbolos que pueden ser terminales o variables. Las letras minúsculas u, v, w, x, y y z denotan cadenas de terminales. Las letras griegas denotan cadenas de variables y terminales.

Si cada quien se apega a esas conversiones mencionadas anteriormente, podemos deducir las variables, terminales y el símbolo de inicio de una gramática únicamente examinando sus producciones. Así, se puede representar una gramática por una simple lista de producciones. Si son las producciones para las variables A de alguna gramática, entonces se pueden expresar por la notación: donde la línea vertical se lee como “0”. La gramática del ejemplo anterior se escribe como .

Otra Definición Las GIC (Gramáticas Independientes del Contexto) o GLC (Gramáticas Libres del Contexto) son llamadas también “Gramática en la Forma de Backus-Naur (BNF)” (usado para describir lenguajes de programación). Las GIC se usan para inferir si ciertas cadenas están en el lenguaje expresado por la gramática. Hay 2 tipos de inferencia:

6

Gramáticas Libres de Contexto
• • Inferencia recursiva (cuerpo a cabeza/de cadenas a variables). Derivación (cabeza a cuerpo, expansión de producciones).

Ejemplo: cadenas palíndromas en {0,1} S → λ | 0 | 1 | 1S1 | 0S0

Derivación El proceso de derivación es el método que nos permite obtener a partir, de una gramática establecida, el conjunto de palabras del lenguaje correspondiente. Este proceso solo nos exige partir del símbolo inicial o sea un no terminal. Para el caso de las Gramáticas Libres del Contexto, podemos implementar procesos de derivación específicos como el de izquierda y el de derecha, siempre y cuando las producciones lo permitan. Las derivaciones a la izquierda significan reemplazar el primer no terminal que encontramos en la cadena de b recorriéndola de izquierda a derecha, en todo el proceso de derivación.

Las derivaciones a la derecha significan reemplazar el primer no terminal que encontramos en la cadena de b recorriéndola de derecha a izquierda, en todo el proceso de derivación.

7

Gramáticas Libres de Contexto
Aplicación de las producciones de una Gramática para obtener una cadena de terminales. Consiste en sustituir la variable de la cabeza por el cuerpo de la producción. Símbolo empleado es: ⇒ (un paso de derivación) βAµ ⇒ β ξ µ si existe la producción A → ξ A en V y ξ, µ, β en (V U T)* ⇒* Este símbolo indica múltiples pasos de derivación Por ejemplo de la GLC anterior S → λ | 0 | 1 | 1S1 | 0S0 Una derivación sería la siguiente: S ൌ൐ସ 1S1 ൌ൐ସ 11S11 ൌ൐ଶ 110S01 ൌ൐ଷ 1101011 esta cadena es binaria palíndroma.

Árboles de derivación Es un árbol formado a partir de la derivación de una gramática. Sirve para estudiar la ambigüedad (más de un árbol de derivación y por tanto de interpretaciones). Los arboles de derivación permiten hacer una clasificación jerárquica en las palabras de un lenguaje que es útil en aplicaciones como la compilación de lenguajes de programación. Los vértices de una árbol de derivación son etiquetados con terminales o variables de la gramática o posiblemente con €. Si un vértice interior n es etiquetado con A, y los hijos de n son etiquetados con X1, X2, …, Xk por la izquierda, entonces A → X1X2…Xk debe ser una producción. Características: • • • Cada nodo interior es variable. Cada nodo hoja es Terminal o €. Si existe una producción A →X1X2…Xk, ver el siguiente árbol:

La cadena resultado del árbol: las hojas del árbol concatenadas de izquierda a derecha, recorrido en pre orden.

8

Gramáticas Libres de Contexto

Por ejemplo, para la siguiente gramática:

Su árbol de derivación es:

Formalmente, sea G = (V, T, P, S) una Gramáticas Libres de Contexto. Un árbol es de derivación es G si: • • • • Cada vértice tiene una etiqueta y es un símbolo en V u T u {€}. La etiqueta de la raíz es S. Si un vértice es interior y tiene etiqueta A, entonces A € V. Si un vértice n tiene etiqueta A y los vértices n1, n2, …, nk son hijos del vértice n, ordenados por la izquierda, con etiquetas X1, X2, …, Xk, respectivamente, entonces A → X1X2 … Xk debe ser una producción en P. Si el vértice n tiene etiqueta €, entonces n es una hoja y es el único hijo de su padre.

9

Gramáticas Libres de Contexto
BNF (Backus-Naur Form) Las gramáticas libres del contexto se escriben, frecuentemente, utilizando una notación conocida como BNF (Backus-Naur Form). BNF es la técnica más común para definir la sintaxis de los lenguajes de programación. El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de programación de la computadora, de los sistemas de comando y de los protocolos de comunicación, así como una notación para representar partes de las gramáticas de la lengua natural (por ejemplo, el metro en la poesía de Venpa). La mayoría de los libros de textos para la teoría o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF. Algunas variantes, tales como la Augmented Backus-Naur Form (ABNF) y la Extended Backus– Naur Form (EBNF), tienen su propia documentación. En esta notación se deben seguir las siguientes convenciones: • • • • • Los no terminales se escriben entre paréntesis angulares < >. Los terminales se representan con cadenas de caracteres sin paréntesis angulares. El lado izquierdo de cada regla debe tener únicamente un no terminal (ya que es una gramática libre del contexto). El símbolo ::=, que se lee “se define como” o “se reescribe como”, se utiliza en lugar de →. Varias producciones del tipo: o <A> ::= <B1> o <A> ::= <B2> o . o . o . o <A> ::= <Bn>

Se pueden escribir como <A> ::= <B1> | <B2> | ... | <Bn>. Ejemplo: La siguiente es una definición BNF del lenguaje que consiste de cadenas de paréntesis anidados: <cadena_par> :: = <cadena_par> <paréntesis> | <paréntesis> <Paréntesis> ::= (<cadena_par> ) | ( ) Por ejemplo las cadenas ( ) ( ( ) ) y ( ) ( ) ( ) son cadenas válidas. En cambio las cadenas ( ( ) y ( ) ) ) no pertenecen al lenguaje.

10

Gramáticas Libres de Contexto
Conceptos Sobre Gramáticas Libres de Contexto • • Árbol de derivación o Las derivaciones se pueden representar en forma de árbol Derivación más a la izquierda y más a la derecha o Si existe un árbol de derivación con la raíz etiquetada con A y resultado w, entonces A ⇒* w, A ⇒mi* w, A ⇒md* w. Gramática ambigua o Una sentencia w se denomina ambigua si puede obtenerse por más de un árbol de derivación (o equivalentemente, más de una derivación más a la izquierda o más a la derecha). o Una gramática G se denomina ambigua si el lenguaje que genera contiene alguna sentencia ambigua. Lenguaje inherentemente ambiguo o Un lenguaje se denomina inherentemente ambiguo si no existe una gramática no ambigua que lo genere.

Propiedades de los lenguajes libres de contexto • Una de las definiciones alternativas y equivalentes de lenguaje libre de contexto emplea autómatas no deterministas: un lenguaje es libre de contexto si puede ser aceptado por ese autómata. Un lenguaje puede ser también modelado como un conjunto de todas las secuencias de terminales aceptadas por la gramática. Este modelo ayuda a entender las operaciones de conjuntos sobre lenguajes. La unión y concatenación de dos lenguajes libres de contexto es también libre de contexto. El inverso de un lenguaje libre de contexto es también libre de contexto, pero el complemento no tiene por que serlo. Los lenguajes regulares son libres de contexto porque pueden ser descritos mediante una gramática de libre contexto. La intersección de un lenguaje libre de contexto y un lenguaje regular es siempre libre de contexto. Existen Gramáticas sensibles al contexto que no son libres de contexto. Para demostrar que un lenguaje dado no es libre de contexto, se puede emplear el lema del bombeo para lenguajes libres de contexto. El problema de determinar si una gramática sensible al contexto describe un lenguaje libre del contexto es indecidible.

• • • • • • •

11

Gramáticas Libres de Contexto

Conclusión
Habiendo concluido con el desarrollo del tema gramáticas libres de contexto, podemos entender que cada lenguaje debe de tener una gramática libre de contexto empleada. Que para entender la gramatical libre de contexto se debe tener en cuenta los siguientes tema: Árbol de derivación, Derivación más a la izquierda y más a la derecha, Gramática ambigua, y los lenguajes inherentemente ambiguos. Las gramáticas libres del contexto se escriben, frecuentemente, utilizando una notación conocida como BNF (Backus-Naur Form). El cual es la técnica más común para definir la sintaxis de los lenguajes de programación.

Referencia
http://acme.math.cinvestav.mx/~basico/cuatro.html http://www.slideshare.net/abelrod12/gramtica-de-contexto-libre-abel-rodriguez-081297 http://ccc.inaoep.mx/~emorales/Cursos/Automatas/GramsLibresContexto.pdf http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r43399.PDF http://www.exa.unicen.edu.ar/catedras/ccomp1/Apunte5.pdf http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_Backus-Naur http://webdelprofesor.ula.ve/ingenieria/hyelitza/materias/preteoria/apuntes/tema4.p df http://gramaticas.galeon.com/gramatica.html

12