Los lenguajes libres de contexto tienen numerosas aplicaciones en lenguajes de programación, en particular, la mayoría de las expresiones aritméticas son generadas por gramáticas libres de contexto.
Contexto
editar
Gramática libre de contexto
editar
Diferentes gramáticas libres de contexto pueden generar el mismo lenguaje libre de contexto. Las propiedades intrínsecas del lenguaje pueden distinguirse de las propiedades extrínsecas de una gramática particular al comparar múltiples gramáticas que describen el lenguaje.
Autómatas
editar
El conjunto de todos los lenguajes libres de contexto es idéntico al conjunto de lenguajes aceptados por autómata con pila, lo que hace que estos lenguajes sean susceptibles de análisis sintáctico. Además, para una GLC dada, existe una manera directa de producir un autómata de pila para la gramática (y, por ende, el lenguaje correspondiente), aunque el proceso inverso (producir una gramática dado un autómata) no es tan directo.
Ejemplos
editar
Un ejemplo de lenguaje libre de contexto es , el lenguaje de todas las cadenas no vacías de longitud par, cuya primera mitad está formada por a y la segunda mitad por b. L es generado por la gramática .
Este lenguaje no es regular.
Los LLC no ambiguos son un subconjunto propio de todos los LLC: existen LLC inherentemente ambiguos. Un ejemplo de un LLC inherentemente ambiguo es la unión de con . Este conjunto es libre de contexto, ya que la unión de dos lenguajes libres de contexto siempre es libre de contexto. Pero no hay forma de analizar sin ambigüedad las cadenas en el subconjunto (no libre de contexto) , que es la intersección de estos dos lenguajes.[1]
La naturaleza libre de contexto del lenguaje facilita su análisis con un autómata de pila.
Determinar una instancia del problema de pertenencia; es decir, dada una cadena , determinar si , donde es el lenguaje generado por una gramática dada ; también se conoce como «reconocimiento». El reconocimiento libre de contexto para gramáticas en forma normal de Chomsky fue demostrado por Leslie G. Valiant como reducible a la multiplicación de matrices booleanas, heredando así su límite superior de complejidad de O(n2.3728596).[2][Nota 2]
Por el contrario, Lillian Lee ha demostrado que la multiplicación de matrices booleanas O(n3−ε) es reducible a un análisis sintáctico de GLC O(n3−3ε), estableciendo así un límite inferior para este último.[3]
El uso práctico de los lenguajes libres de contexto también requiere producir un árbol de derivación que muestre la estructura que la gramática asocia con la cadena dada. El proceso de producir este árbol se llama «análisis sintáctico». Los analizadores conocidos tienen una complejidad temporal cúbica en el tamaño de la cadena que se analiza.
Formalmente, el conjunto de todos los lenguajes libres de contexto es idéntico al conjunto de lenguajes aceptados por autómatas de pila (PDA). Los algoritmos de análisis para lenguajes libres de contexto incluyen el algoritmo CYK y el algoritmo de Earley.
Una subclase especial de lenguajes libres de contexto son los lenguajes libres de contexto deterministas, que se definen como el conjunto de lenguajes aceptados por un autómata de pila determinista y pueden ser analizados por un analizador LR(k).[4]
Véase también gramática de expresiones de análisis como un enfoque alternativo para gramáticas y analizadores.
Propiedades de cierre
editar
La clase de lenguajes libres de contexto es cerrada bajo las siguientes operaciones. Es decir, si «L» y «P» son lenguajes libres de contexto, los siguientes lenguajes también son libres de contexto:
la imagen de «L» bajo un homomorfismo inverso [8]
el desplazamiento circular de «L» (el lenguaje )[9]
la cerradura de prefijos de «L» (el conjunto de todos los prefijos de cadenas de «L»)[10]
el cociente «L»/«R» de «L» por un lenguaje regular «R»[11]
No cerradura bajo intersección, complemento y diferencia
editar
Los lenguajes libres de contexto no son cerrados bajo intersección. Esto se puede ver al tomar los lenguajes y , ambos libres de contexto.[Nota 3] Su intersección es , que se puede demostrar que no es libre de contexto mediante el lema de bombeo para lenguajes libres de contexto. Como consecuencia, los lenguajes libres de contexto no son cerrados bajo complementación, ya que para cualesquiera lenguajes «A» y «B», su intersección puede expresarse mediante unión y complemento: . En particular, los lenguajes libres de contexto no son cerrados bajo diferencia, ya que el complemento puede expresarse mediante diferencia: .[12]
Sin embargo, si «L» es un lenguaje libre de contexto y «D» es un lenguaje regular, entonces tanto su intersección como su diferencia son lenguajes libres de contexto.[13]
Decidibilidad
editar
En la teoría de lenguajes formales, las preguntas sobre lenguajes regulares suelen ser decidibles, pero las de lenguajes libres de contexto a menudo no lo son. Es decidible si un lenguaje de este tipo es finito, pero no si contiene todas las cadenas posibles, si es regular, si es no ambiguo, o si es equivalente a un lenguaje con una gramática diferente.
Disyunción: ¿es ?[15] Sin embargo, la intersección de un lenguaje libre de contexto y un lenguaje «regular» es libre de contexto,[16][17] por lo que la variante del problema donde «B» es una gramática regular es decidible (véase «Vaciedad» más abajo).
Contención: ¿es ?[18] Nuevamente, la variante del problema donde «B» es una gramática regular es decidible,[aclaración requerida] mientras que aquella donde «A» es regular generalmente no lo es.[19]
Los siguientes problemas son «decidibles» para lenguajes libres de contexto arbitrarios:
Vaciedad: Dada una gramática libre de contexto «A», ¿es ?[23]
Finidad: Dada una gramática libre de contexto «A», ¿es finito?[24]
Pertenencia: Dada una gramática libre de contexto «G» y una palabra , ¿es ? Los algoritmos eficientes en tiempo polinómico para el problema de pertenencia son el algoritmo CYK y el algoritmo de Earley.
Según Hopcroft, Motwani, Ullman (2003),[25]
muchas de las propiedades fundamentales de cierre y (in)decidibilidad de los lenguajes libres de contexto fueron demostradas en el artículo de 1961 de Bar-Hillel, Perles y Shamir.[26]
Lenguajes que no son libres de contexto
editar
El conjunto es un lenguaje sensible al contexto, pero no existe una gramática libre de contexto que genere este lenguaje.[27] Por lo tanto, existen lenguajes sensibles al contexto que no son libres de contexto. Para probar que un lenguaje dado no es libre de contexto, se puede emplear el lema del bombeo para lenguajes libres de contexto[26] o varios otros métodos, como el lema de Ogden o el teorema de Parikh.[28]
↑Una gramática libre de contexto para el lenguaje «A» se da por las siguientes reglas de producción, tomando «S» como símbolo inicial: «S» → «Sc» | «aTb» | «ε»; «T» → «aTb» | «ε». La gramática para «B» es análoga.
↑Valiant, Leslie G. (abril de 1975). «General context-free recognition in less than cubic time» [Reconocimiento libre de contexto general en menos de tiempo cúbico]. Journal of Computer and System Sciences10 (2): 308-315. doi:10.1016/s0022-0000(75)80046-8. Consultado el 22 de septiembre de 2025.
↑Lee, Lillian (enero de 2002). «Fast Context-Free Grammar Parsing Requires Fast Boolean Matrix Multiplication» [El análisis rápido de gramáticas libres de contexto requiere una multiplicación rápida de matrices booleanas]. J ACM49 (1): 1-15. S2CID 1243491. arXiv:cs/0112018. Archivado desde el original el 27 de abril de 2003. Consultado el 22 de septiembre de 2025.
↑Knuth, D. E. (julio de 1965). «On the translation of languages from left to right» [Sobre la traducción de lenguajes de izquierda a derecha]. Information and Control8 (6): 607-639. doi:10.1016/S0019-9958(65)90426-2.|fechaacceso= requiere |url= (ayuda)
↑Stephen Scheinberg (1960). «Note on the Boolean Properties of Context Free Languages» [Nota sobre las propiedades booleanas de los lenguajes libres de contexto]. Information and Control(en inglés)3 (4): 372–375. doi:10.1016/s0019-9958(60)90965-7. Archivado desde el original el 26 de noviembre de 2018. Consultado el 22 de septiembre de 2025.
↑Beigel, Richard; Gasarch, William. «A Proof that if L = L1 ∩ L2 where L1 is CFL and L2 is Regular then L is Context Free Which Does Not use PDA's» [Una prueba de que si L = L1 ∩ L2 donde L1 es LLC y L2 es regular, entonces L es libre de contexto sin usar PDA]. University of Maryland Department of Computer Science(en inglés). Archivado desde el original el 12 de diciembre de 2014. Consultado el 22 de septiembre de 2025.
↑John E. Hopcroft; Rajeev Motwani; Jeffrey D. Ullman (2003). Introduction to Automata Theory, Languages, and Computation [Introducción a la teoría de autómatas, lenguajes y computación]. Addison Wesley.|fechaacceso= requiere |url= (ayuda) Aquí: Sección 7.6, p.304, y Sección 9.7, p.411
↑ abYehoshua Bar-Hillel; Micha Asher Perles; Eli Shamir (1961). «On Formal Properties of Simple Phrase-Structure Grammars» [Sobre las propiedades formales de gramáticas de estructura de frases simples]. Zeitschrift für Phonetik, Sprachwissenschaft und Kommunikationsforschung14 (2): 143-172.|fechaacceso= requiere |url= (ayuda)
Salomaa, Arto (1973). Formal Languages [Lenguajes formales]. ACM Monograph Series.|fechaacceso= requiere |url= (ayuda)
Lecturas adicionales
editar
Autebert, Jean-Michel; Berstel, Jean; Boasson, Luc (1997). «Context-Free Languages and Push-Down Automata». En G. Rozenberg; A. Salomaa, eds. Handbook of Formal Languages [Lenguajes libres de contexto y autómatas de pila] 1. Springer-Verlag. pp. 111-174. Archivado desde el original el 16 de mayo de 2011. Consultado el 22 de septiembre de 2025.
Ginsburg, Seymour (1966). The Mathematical Theory of Context-Free Languages [La teoría matemática de los lenguajes libres de contexto]. New York, NY, USA: McGraw-Hill.|fechaacceso= requiere |url= (ayuda)
Sipser, Michael (1997). «2: Context-Free Languages». Introduction to the Theory of Computation(en inglés) (PWS Publishing): 91-122. ISBN978-0-534-94728-6.