La jerarquía de Chomsky en los campos de la teoría formal del lenguaje , la informática y la lingüística , es una jerarquía de contención de clases de gramáticas formales . Una gramática formal describe cómo formar cadenas a partir del vocabulario (o alfabeto) de un idioma que sean válidas de acuerdo con la sintaxis del mismo. El lingüista Noam Chomsky teorizó que existían cuatro clases diferentes de gramáticas formales que podían generar idiomas cada vez más complejos. Cada clase también puede generar por completo el idioma de todas las clases inferiores (conjunto incluido).
La idea general de una jerarquía de gramáticas fue descrita por primera vez por Noam Chomsky en "Tres modelos para la descripción del lenguaje". [1] Marcel-Paul Schützenberger también jugó un papel en el desarrollo de la teoría de los lenguajes formales ; el artículo "La teoría algebraica de los lenguajes libres de contexto" [2] describe la jerarquía moderna, incluidas las gramáticas libres de contexto. [3]
De manera independiente, junto con los lingüistas, los matemáticos estaban desarrollando modelos de computación (a través de autómatas ). Analizar una oración en un idioma es similar a la computación, y las gramáticas descritas por Chomsky demostraron ser similares y equivalentes en potencia computacional a varios modelos de máquinas. [4]
La siguiente tabla resume cada uno de los cuatro tipos de gramática de Chomsky, la clase de lenguaje que genera, el tipo de autómata que lo reconoce y la forma que deben tener sus reglas. Las clases se definen por las restricciones de las reglas de producción.
Nótese que el conjunto de gramáticas correspondientes a lenguajes recursivos no es miembro de esta jerarquía; estos estarían propiamente entre Tipo-0 y Tipo-1.
Todo lenguaje regular es independiente del contexto, todo lenguaje independiente del contexto es sensible al contexto, todo lenguaje sensible al contexto es recursivo y todo lenguaje recursivo es recursivamente enumerable. Todas estas son inclusiones propias, lo que significa que existen lenguajes recursivamente enumerables que no son sensibles al contexto, lenguajes sensibles al contexto que no son independientes del contexto e lenguajes independientes del contexto que no son regulares. [7]
Las gramáticas de tipo 3 generan los lenguajes regulares . Dicha gramática restringe sus reglas a un único no terminal en el lado izquierdo y un lado derecho que consiste en un único terminal, posiblemente seguido por un único no terminal, en cuyo caso la gramática es regular derecha . Alternativamente, todas las reglas pueden tener sus lados derechos que consisten en un único terminal, posiblemente precedido por un único no terminal ( regular izquierda ). Estos generan los mismos lenguajes. Sin embargo, si se combinan las reglas regulares izquierdas y las reglas regulares derechas, el lenguaje ya no necesita ser regular. La regla también se permite aquí si no aparece en el lado derecho de ninguna regla. Estos lenguajes son exactamente todos los lenguajes que pueden ser decididos por un autómata de estados finitos . Además, esta familia de lenguajes formales puede obtenerse mediante expresiones regulares . Los lenguajes regulares se utilizan comúnmente para definir patrones de búsqueda y la estructura léxica de los lenguajes de programación.
Por ejemplo, el lenguaje regular es generado por la gramática Tipo-3 con las siguientes producciones .
Las gramáticas de tipo 2 generan los lenguajes libres de contexto . Estos se definen mediante reglas de la forma con ser un no terminal y ser una cadena de terminales y/o no terminales. Estos lenguajes son exactamente todos los lenguajes que pueden ser reconocidos por un autómata de inserción no determinista . Los lenguajes libres de contexto, o más bien su subconjunto de lenguajes libres de contexto deterministas , son la base teórica para la estructura de frases de la mayoría de los lenguajes de programación , aunque su sintaxis también incluye la resolución de nombres sensible al contexto debido a las declaraciones y el alcance . A menudo se utiliza un subconjunto de gramáticas para facilitar el análisis, como por ejemplo mediante un analizador LL .
Por ejemplo, el lenguaje libre de contexto es generado por la gramática Tipo-2 con las siguientes producciones.
El lenguaje es libre de contexto pero no regular (según el lema de bombeo para lenguajes regulares ).
Las gramáticas de tipo 1 generan lenguajes sensibles al contexto . Estas gramáticas tienen reglas de la forma con un no terminal y , y cadenas de terminales y/o no terminales. Las cadenas y pueden estar vacías, pero no deben estar vacías. La regla está permitida si no aparece en el lado derecho de ninguna regla. Los lenguajes descritos por estas gramáticas son exactamente todos los lenguajes que pueden ser reconocidos por un autómata lineal acotado (una máquina de Turing no determinista cuya cinta está acotada por una constante multiplicada por la longitud de la entrada).
Por ejemplo, el lenguaje sensible al contexto es generado por la gramática Tipo-1 con las siguientes producciones.
El lenguaje es sensible al contexto, pero no independiente del contexto (según el lema de bombeo para lenguajes independientes del contexto ). En el artículo Gramáticas sensibles al contexto se esboza una prueba de que esta gramática genera algo .
Las gramáticas de tipo 0 incluyen todas las gramáticas formales. No hay restricciones en las reglas de producción. Generan exactamente todos los lenguajes que pueden ser reconocidos por una máquina de Turing , por lo tanto, cualquier lenguaje que sea posible generar puede ser generado por una gramática de tipo 0. [8] Estos lenguajes también se conocen como lenguajes recursivamente enumerables o lenguajes reconocibles por Turing . [8] Nótese que esto es diferente de los lenguajes recursivos , que pueden ser decididos por una máquina de Turing que siempre se detiene .
-Turing