Gramática sensible al contexto
Una gramática sensible al contexto (CSG) es una gramática formal en la que los lados izquierdo y derecho de cualquier regla de producción pueden estar rodeados por un contexto de símbolos terminales y no terminales. Las gramáticas sensibles al contexto son más generales que las gramáticas libres de contexto, en el sentido de que hay lenguajes que pueden ser descritos por CSG pero no por gramáticas libres de contexto. Las gramáticas sensibles al contexto son menos generales (en el mismo sentido) que las gramáticas no restringidas. Por lo tanto, los CSG se posicionan entre las gramáticas sin contexto y sin restricciones en la jerarquía de Chomsky.
Un lenguaje formal que se puede describir mediante una gramática sensible al contexto o, de manera equivalente, mediante una gramática no contractual o un autómata lineal acotado, se denomina lenguaje sensible al contexto. Algunos libros de texto en realidad definen los CSG como no contractuales, aunque no es así como los definió Noam Chomsky en 1959. Esta elección de definición no hace ninguna diferencia en términos de los lenguajes generados (es decir, las dos definiciones son débilmente equivalentes), pero sí hace una diferencia. diferencia en términos de qué gramáticas se consideran estructuralmente sensibles al contexto; este último tema fue analizado por Chomsky en 1963.
Chomsky introdujo las gramáticas sensibles al contexto como una forma de describir la sintaxis del lenguaje natural donde a menudo ocurre que una palabra puede o no ser apropiada en un lugar determinado según el contexto. Walter Savitch ha criticado la terminología "sensible al contexto" como engañosa y propuesta "no borrable" como una mejor explicación de la distinción entre un CSG y una gramática no restringida.
Aunque es bien sabido que ciertas características de los lenguajes (por ejemplo, la dependencia entre series) no están libres de contexto, es una pregunta abierta cuánto poder expresivo de CSG se necesita para capturar la sensibilidad del contexto que se encuentra en lenguas naturales. La investigación posterior en esta área se ha centrado en los lenguajes ligeramente sensibles al contexto más manejables desde el punto de vista computacional. Las sintaxis de algunos lenguajes de programación visual se pueden describir mediante gramáticas gráficas sensibles al contexto.
Definición formal
Una gramática formal G = (N, Σ, P, S), con N un conjunto de símbolos no terminales, Σ un conjunto de símbolos terminales, P un conjunto de reglas de producción y S el símbolo de inicio, es contexto -sensible si todas las reglas en P son de la forma
- αAβ → αγβ
con A ∈ N, α,β ∈ (N∪Σ)* y γ ∈ (N∪Σ)+.
Una cadena u ∈ (N∪Σ)* produce directamente, o deriva directamente to, una cadena v ∈ (N∪Σ)*, indicada como u ⇒ v, si u se puede escribir como lαAβr, y v se puede escribir como lαγβr, para alguna regla de producción (αAβ→αγβ) ∈ P, y algunas cadenas de contexto l, r ∈ (N∪Σ)*. Más generalmente, se dice que u produce, o deriva a, v, denotado como u ⇒* v, si u = u1 ⇒...⇒ un = v para algunos n≥0 y algunas cadenas u2,..., un-1 (N ∪Σ)*. Es decir, la relación (⇒*) es la clausura reflexiva transitiva de la relación (⇒).
El lenguaje de la gramática G es el conjunto de todas las cadenas de símbolos terminales derivables de su símbolo inicial, formalmente: L(G) = { w ∈ Σ*: S ⇒* w }. Las derivaciones que no terminan en una cadena compuesta solo por símbolos terminales son posibles, pero no contribuyen a L(G).
La única diferencia entre esta definición de Chomsky y la de las gramáticas no restringidas es que γ puede estar vacía en el caso no restringido.
Algunas definiciones de una gramática sensible al contexto solo requieren que para cualquier regla de producción de la forma u → v, la longitud de u sea menor o igual que la longitud de v. Este requisito aparentemente más débil es de hecho débilmente equivalente, consulte Gramática no contratante # Transformación en gramática sensible al contexto.
Además, una regla de la forma
- S → λ
donde λ representa la cadena vacía y S no aparece en el lado derecho de ninguna regla. La adición de la cadena vacía permite afirmar que los lenguajes sensibles al contexto son un superconjunto adecuado de los lenguajes libres de contexto, en lugar de tener que hacer la afirmación más débil de que todas las gramáticas libres de contexto sin producciones →λ también son gramáticas sensibles al contexto.
El nombre sensible al contexto se explica por α y β que forman el contexto de A y determinan si A se puede reemplazar con γ o no. Esto es diferente de una gramática libre de contexto donde el contexto de un no terminal no se toma en consideración. De hecho, cada producción de una gramática libre de contexto es de la forma V → w donde V es un simple símbolo no terminal, y w es una cadena de terminales y/o no terminales; w puede estar vacío.
Si la posibilidad de agregar la cadena vacía a un idioma se agrega a las cadenas reconocidas por las gramáticas no contratantes (que nunca pueden incluir la cadena vacía), entonces los idiomas en estas dos definiciones son idénticos.
Las gramáticas sensibles al contexto izquierdo y contexto derecho se definen restringiendo las reglas a solo la forma αA → αγ ya solo Aβ → γβ, respectivamente. Los lenguajes generados por estas gramáticas también son la clase completa de lenguajes sensibles al contexto. La equivalencia se estableció por la forma normal de Penttonen.
Ejemplos
Anbncn
La siguiente gramática sensible al contexto, con el símbolo de inicio S, genera el lenguaje canónico no independiente del contexto { anbncn: n ≥ 1 }:
1. | S | → | a | B | C | ||
2. | S | → | a | S | B | C | |
3. | C | B | → | C | Z | ||
4. | C | Z | → | W | Z | ||
5. | W | Z | → | W | C | ||
6. | W | C | → | B | C | ||
7. | a | B | → | a | b | ||
8. | b | B | → | b | b | ||
9. | b | C | → | b | c | ||
10. | c | C | → | c | c |
Las reglas 1 y 2 permiten expandir S a anBC(BC)n-1; las reglas 3 a 6 permiten intercambiar sucesivamente cada CB por BC (se necesitan cuatro reglas para eso ya que una regla CB → BC no encajaría en el esquema αAβ → αγβ); las reglas 7 a 10 permiten reemplazar los no terminales B y C con sus correspondientes terminales b y c respectivamente, siempre y cuando esté en el lugar correcto. Una cadena de generación para aaabbbccc es:
- S
- →2 aSBC
- →2 aaSBCBC
- →1 aaaBCBCBC
- →3 aaaBCZCBC
- →4 aaaBWZCBC
- →5 aaaBWCCBC
- →6 aaaBBCCBC
- →3 aaaBBCCZC
- →4 aaaBBCWZC
- →5 aaaBBCWCC
- →6 aaaBBCBCC
- →3 aaBBCZCC
- →4 aaBBWZCC
- →5 aaBBWCCC
- →6 aaBBBCCC
- →7 aaabBBCCC
- →8 aaaabbBCCC
- →8 aaabbbCCC
- →9 aabbbcCC
- →10 aaabbbccC
- →10 aaabbbccc
Anbncndn, etc.
Gramáticas más complicadas CSG{displaystyle CSG}se puede utilizar para parse { anbncndn: n ≥ 1 }, y otros idiomas con más letras. Aquí mostramos un enfoque más simple usando gramáticas no contratantes: Comience con un núcleo de producciones regulares generando las formas sententiales ()ABCD)nabcd{displaystyle (ABCD)} {n}abcd} e incluyen las producciones no contratantes pDa:Da→ → aD{displaystyle "Darightarrow aD", pDb:Db→ → bD{displaystyle P_{Db}:Dbrightarrow bD}, pDc:Dc→ → cD{displaystyle P_{Dc}:Dcrightarrow cD}, pDd:Dd→ → dd{displaystyle Ddrightarrow dd, pCa:Ca→ → aC{displaystyle Carightarrow aC}, pCb:Cb→ → bC{displaystyle P_{Cb}:Cbrightarrow BC!, pCc:Cc→ → cc{displaystyle P_{Cc}:Ccrightarrow cc}, pBa:Ba→ → aB{displaystyle "Barightarrow aB", pBb:Bb→ → bb{displaystyle P_{Bb}:Bbrightarrow Bb., pAa:Aa→ → aa{displaystyle Aarightarrow aa.
Ambncmdn
Una gramática no contratante (para la cual hay un equivalente) CSG{displaystyle CSG}) para el idioma LCross={}ambncmdn:m≥ ≥ 1,n≥ ≥ 1}{displaystyle L_{Cross}={m}b^{n}c^{m}d^{n}:mgeq 1,ngeq 1}} se define por p1:R→ → aRCSilencioaC{displaystyle P_{1}:Rrightarrow aRC habitaC}y p3:T→ → BTdSilencioBd{displaystyle P_{3}:Trightarrow BTd habitBd, p5:CB→ → BC{displaystyle P_{5}:CBrightarrow BC!, p0:S→ → RT{displaystyle Srightarrow RT!, p6:aB→ → ab{displaystyle ABrightarrow ab, p7:bB→ → bb{displaystyle P_{7}:bBrightarrow Bb., p8:Cd→ → cd{displaystyle P_{8}:Cdrightarrow cd, p9:Cc→ → cc{displaystyle P_{9}:Ccrightarrow cc}.
Con estas definiciones, una derivación para a3b2c3d2{displaystyle a^{3}b^{2}c^{3}d^{2} es: S⇒ ⇒ p0RT⇒ ⇒ p12p2a3C3T⇒ ⇒ p3p4a3C3B2d2⇒ ⇒ p56a3B2C3d2⇒ ⇒ p6p7a3b2C3d2⇒ ⇒ p8p92a3b2c3d2{displaystyle SRightarrow "Rightarrow" ¿Por qué? ¿Por qué? ¿Por qué? ¿Por qué? ¿Qué?.
A2i
En el Ejemplo 9.5 (p. 224) de (Hopcroft, Ullman, 1979):
- S→ → [ACaB]{displaystyle Srightarrow [ACaB]}
- {}[Ca]a→ → aa[Ca][Ca][aB]→ → aa[CaB][ACa]a→ → [Aa]a[Ca][ACa][aB]→ → [Aa]a[CaB][ACaB]→ → [Aa][aCB][CaB]→ → a[aCB]{displaystyle {begin{cases} [Ca]arightarrow aa[Ca]\\[aB]rightarrow aa[CaB]\\\ [ACa]arightarrow [Aaa]a[Ca]\\[aB]rightarrow [Aaaa]a[CaB]\\\ [ACAB]rightarrow [AaaCB]\\ [CaB]rightarrow a[aCB]end{cases}}
- [aCB]→ → [aDB]{displaystyle [aCB]rightarrow [aDB]
- [aCB]→ → [aE]{displaystyle [aCB]rightarrow [aE]
- {}a[Da]→ → [Da]a[aDB]→ → [DaB][Aa][Da]→ → [ADa]aa[DaB]→ → [Da][aB][Aa][DaB]→ → [ADa][aB]{displaystyle {begin{cases} a[Da]rightarrow [Da]a\\ [aDB]rightarrow [DaB]\\ [Aaa][Da]rightarrow [ADa]a\ a[DaB]rightarrow [Da][aB]\\\\ [Aa] [DaB]rightarrow [ADa][aB]end{cases}
- [ADa]→ → [ACa]{displaystyle [ADa]rightarrow [ACa]
- {}a[Ea]→ → [Ea]a[aE]→ → [Ea][Aa][Ea]→ → [AEa]a{displaystyle {begin{cases} a[Ea]rightarrow [Ea]a\\ [AE]rightarrow [Ea]\\ [Aa] [Ea]rightarrow [AEa]aend{cases}}
- [AEa]→ → a{displaystyle [AEa]rightarrow a}
Forma normal de Kuroda
Cada gramática sensible al contexto que no genera la cadena vacía puede transformarse en una débilmente equivalente en la forma normal de Kuroda. "Débilmente equivalente" aquí significa que las dos gramáticas generan el mismo lenguaje. En general, la forma normal no será sensible al contexto, sino que será una gramática sin contracciones.
La forma normal de Kuroda es una forma normal real para gramáticas no contratantes.
Propiedades y usos
Equivalencia a autómata lineal acotado
Un lenguaje formal puede ser descrito por una gramática sensible al contexto si y solo si es aceptado por algún autómata lineal acotado (LBA). En algunos libros de texto, este resultado se atribuye únicamente a Landweber y Kuroda. Otros lo llaman el teorema de Myhill-Landweber-Kuroda. (Myhill introdujo el concepto de LBA determinista en 1960. Peter S. Landweber publicó en 1963 que el lenguaje aceptado por un LBA determinista es sensible al contexto. Kuroda introdujo la noción de LBA no determinista y la equivalencia entre LBA y CSG en 1964).
A partir de 2010, sigue siendo una pregunta abierta si todos los lenguajes sensibles al contexto pueden ser aceptados por un LBA determinista.
Propiedades de cierre
Los lenguajes sensibles al contexto están cerrados bajo el complemento. Este resultado de 1988 se conoce como el teorema de Immerman-Szelepcsényi. Además, están cerrados bajo unión, intersección, concatenación, sustitución, homomorfismo inverso y Kleene plus.
Todo lenguaje recursivamente enumerable L se puede escribir como h(L) para algún lenguaje sensible al contexto L y algo de homomorfismo de cadenas h.
Problemas computacionales
El problema de decisión que pregunta si una cierta cadena s pertenece al lenguaje de una gramática sensible al contexto dada G, es PSPACE-completo. Además, existen gramáticas sensibles al contexto cuyos lenguajes son PSPACE-completo. En otras palabras, existe una gramática sensible al contexto G tal que decidir si una determinada cadena s pertenece al idioma de G es PSPACE- completo (por lo que G es fijo y solo s es parte de la entrada del problema).
El problema del vacío para gramáticas sensibles al contexto (dada una gramática sensible al contexto G, ¿es L(G)=∅ ?) es indecidible.
Como modelo de lenguajes naturales
Savitch ha demostrado el siguiente resultado teórico, en el que basa su crítica de los CSG como base para el lenguaje natural: para cualquier conjunto recursivamente enumerable R, existe un lenguaje/gramática sensible al contexto G que se puede usar como una especie de proxy para probar la membresía en R de la siguiente manera: dada una cadena s, s está en R si y solo si existe un entero positivo n para el cual scn está en G, donde c es un símbolo arbitrario que no forma parte de R.
Se ha demostrado que, en general, casi todos los lenguajes naturales pueden caracterizarse por gramáticas sensibles al contexto, pero toda la clase de CSG parece ser mucho más grande que los lenguajes naturales. Peor aún, dado que el problema de decisión antes mencionado para CSG's es PSPACE-completo, eso los hace totalmente inviables para el uso práctico, ya que un algoritmo de tiempo polinomial para un problema de PSPACE-completo implicaría P = NP.
Se demostró que algunos lenguajes naturales no están libres de contexto, en base a la identificación de las denominadas dependencias seriales cruzadas y fenómenos de codificación ilimitados. Sin embargo, esto no implica necesariamente que toda la clase CSG sea necesaria para capturar la "sensibilidad al contexto" en el sentido coloquial de estos términos en lenguajes naturales. Por ejemplo, los sistemas de reescritura lineales libres de contexto (LCFRS) estrictamente más débiles (que CSG) pueden explicar el fenómeno de las dependencias entre series; uno puede escribir una gramática LCFRS para {anbncndn | n ≥ 1} por ejemplo.
La investigación en curso sobre lingüística computacional se ha centrado en formular otras clases de lenguajes que son "ligeramente sensibles al contexto" cuyos problemas de decisión son factibles, como las gramáticas de árboles adyacentes, las gramáticas categoriales combinatorias, los lenguajes libres de contexto acoplados y los sistemas de reescritura lineales libres de contexto. Los lenguajes generados por estos formalismos se encuentran propiamente entre los lenguajes libres de contexto y sensibles al contexto.
Más recientemente, la clase PTIME se identificó con gramáticas de concatenación de rangos, que ahora se consideran las más expresivas de las clases de lenguaje sensible al contexto suave.
Contenido relacionado
La ley de grimm
Jean-François Champollion
Diacrítico