Últimamente me he divertido un poco explorando el desarrollo de analizadores de lenguaje en el contexto de cómo encajan en la Jerarquía de Chomsky.
¿Cuál es un buen ejemplo del mundo real (es decir, no teórico) de una gramática sensible al contexto?
language-design
parsing
grammar
Evan Plaice
fuente
fuente
Respuestas:
Buena pregunta. Aunque como se menciona en los comentarios, muchos lenguajes de programación son sensibles al contexto, esa sensibilidad al contexto a menudo no se resuelve en la fase de análisis sino en fases posteriores, es decir, un superconjunto del lenguaje se analiza utilizando una gramática libre de contexto, y algunos de esos árboles de análisis luego se filtran
Sin embargo, eso no significa que esos idiomas no sean sensibles al contexto , así que aquí hay algunos ejemplos:
Haskell le permite definir funciones que se utilizan como operadores, y también definir la precedencia y asociatividad de esos operadores. En otras palabras, no puede construir el árbol de análisis correcto para una expresión de operador como:
a menos que ya haya analizado las declaraciones de precedencia / asociatividad para
@@
y##
:Un segundo ejemplo es Bencode , un lenguaje de datos que antepone el contenido con su longitud:
El problema con este formato es que es prácticamente imposible analizar sin algo sensible al contexto, porque la única forma de averiguar los tamaños de "campo" es ... analizando la cadena.
Un tercer ejemplo es XML, suponiendo que se permitan nombres de etiquetas arbitrarios: los nombres de etiquetas de apertura deben tener etiquetas de cierre coincidentes:
fuente
Mientras que sé, gramáticas sensibles al contexto se utilizan en el procesamiento del lenguaje natural, única . Los intérpretes y compiladores de lenguajes de programación no intentan analizar una gramática sin contexto debido a la complejidad (incluso si se ha hecho algún intento en el pasado).
Tal vez, puede encontrar algún ejemplo de uso real en una de estas bibliotecas:
http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits
http://opennlp.sourceforge.net/projects.html
http://nltk.org/
http://nlp.stanford.edu/nlp/javadoc/javanlp/
fuente
Las gramáticas sensibles al contexto a veces se usan en las descripciones de la semántica del lenguaje de programación. Quizás el uso más completo de las gramáticas sensibles al contexto fue la definición del lenguaje Algol68. Se utilizó una gramática libre de contexto de dos niveles (ver http://en.wikipedia.org/wiki/Two-level_grammar ) para describir tanto la sintaxis como la semántica de los programas Algol68.
Un par de mis colegas utilizaron la gramática de Van Wijngaarden para dirigir su implementación de Algol68 (ver http://en.wikipedia.org/wiki/FLACC ).
fuente