En informática , una gramática lineal es una gramática libre de contexto que tiene como máximo un no terminal en el lado derecho de cada una de sus producciones.
Un lenguaje lineal es un lenguaje generado por alguna gramática lineal.
Una gramática lineal simple es G con N = {S}, Σ = {a, b}, P con el símbolo de inicio S y reglas
Genera el lenguaje .
Dos tipos especiales de gramáticas lineales son los siguientes:
Cada uno de estos puede describir exactamente los idiomas regulares . Una gramática regular es una gramática lineal a la izquierda o lineal a la derecha.
Observe que insertando nuevos no terminales, cualquier gramática lineal puede ser reemplazada por una equivalente donde algunas de las reglas son lineales a la izquierda y otras son lineales a la derecha. Por ejemplo, las reglas de G anteriores se pueden reemplazar con
Sin embargo, el requisito de que todas las reglas sean lineales a la izquierda (o que todas las reglas sean lineales a la derecha) conduce a una disminución estricta del poder expresivo de las gramáticas lineales.
Todos los lenguajes regulares son lineales; a la inversa, un ejemplo de lenguaje lineal no regular es { a n b n }. como se explicó anteriormente. Todos los lenguajes lineales están libres de contexto ; a la inversa, un ejemplo de un lenguaje no lineal y sin contexto es el lenguaje Dyck de pares de paréntesis bien equilibrados. Por lo tanto, los lenguajes regulares son un subconjunto adecuado de los lenguajes lineales, que a su vez son un subconjunto adecuado de los lenguajes libres de contexto.
Mientras que los lenguajes lineales que son lenguajes regulares son deterministas , existen lenguajes lineales que son no deterministas. Por ejemplo, el lenguaje de palíndromos pares en el alfabeto de 0 y 1 tiene la gramática lineal S → 0S0 | 1S1 | ε. Una cadena arbitraria de este lenguaje no se puede analizar sin leer primero todas sus letras, lo que significa que un autómata pushdown tiene que probar transiciones de estado alternativas para adaptarse a las diferentes longitudes posibles de una cadena semi-analizada. [1]Este lenguaje no es determinista. Dado que los lenguajes no deterministas libres de contexto no pueden aceptarse en tiempo lineal, los lenguajes lineales no pueden aceptarse en tiempo lineal en el caso general. Además, es indecidible si un lenguaje libre de contexto dado es un lenguaje lineal libre de contexto. [2]
Si L es un lenguaje lineal y M es un lenguaje regular, entonces la intersección es nuevamente un lenguaje lineal; en otras palabras, los lenguajes lineales se cierran bajo intersección con conjuntos regulares. Además, los lenguajes lineales están cerrados bajo homomorfismo y homomorfismo inverso . [3] Estas tres propiedades de cierre muestran que los lenguajes lineales forman un trío completo . Los tríos completos en general son familias de lenguas que disfrutan de un par de otras propiedades matemáticas deseables.