Una gramática lineal es una gramática libre de contexto tal que el lado derecho de cualquiera de sus reglas de inferencia contiene como máximo un no terminal.
Un lenguaje lineal es un lenguaje generado por alguna gramática lineal.
Un ejemplo simple de una gramática lineal es una con un conjunto de no terminales , un alfabeto , un no terminal inicial y reglas de inferencia.
Esta gramática genera un lenguaje irregular .
Hay tipos especiales de gramáticas lineales:
Cada uno de estos tipos describe individualmente exactamente la clase de lenguajes regulares . Una gramática regular es una gramática que es lineal a la izquierda o lineal a la derecha.
Otro tipo especial de gramática lineal es:
Al agregar nuevos no terminales, cualquier gramática lineal se puede reducir a la forma descrita anteriormente sin cambiar el lenguaje generado por la gramática. Por ejemplo, se puede llevar a la forma
Así, las gramáticas lineales de este tipo generan la misma clase de lenguajes que las gramáticas lineales arbitrarias.
Todos los lenguajes regulares son lineales. El ejemplo clásico de un lenguaje lineal pero no regular es el lenguaje descrito anteriormente . Todos los lenguajes lineales son libres de contexto . Un ejemplo de un lenguaje libre de contexto pero no lineal es el lenguaje Dyck , que consta de secuencias de paréntesis regulares. Así, los lenguajes regulares son su propio subconjunto de lenguajes lineales, que a su vez son su propio subconjunto de lenguajes libres de contexto.
Si bien todos los lenguajes lineales regulares son deterministas , existen lenguajes lineales no deterministas. Un ejemplo de tal lenguaje es el lenguaje de los palíndromos de longitud uniforme sobre el alfabeto , que viene dado por una gramática lineal . Una palabra arbitraria de un idioma dado no puede ser analizada por un autómata pushdown sin leer todos sus símbolos, por lo que el idioma no es determinista [1] . El problema de verificar si un lenguaje libre de contexto dado es lineal no tiene solución [2] .