Estaba pensando en gramáticas para lenguajes sensibles a la indendación y parece que las gramáticas CF funcionarían si se combinaran con parámetros. Como ejemplo, considere este fragmento para la gramática simplificada de Python en formato ANTLR:
// on top-level the statements have empty indent
program
: statement('')+
;
// let's consider only one compound statement and one simple statement for now
statement(indent)
: ifStatement(indent)
| passStatement(indent)
;
passStatement(indent)
: indent 'pass' NEWLINE
;
// statements under if must have current indent plus 4 spaces
ifStatement(indent)
: indent 'if' expression ':' NEWLINE (statement(indent ' ')+)
;
Mi pregunta: ¿Este tipo de gramáticas (CFG con parámetros) tiene un nombre?
Parece que no sería difícil escribir un analizador de descenso recursivo para esta gramática (los parámetros deberían ser básicamente analizadores sintácticos). ¿Cuáles podrían ser las dificultades con este enfoque?
¿La adición de parámetros eleva la clase de idioma compatible por encima de libre de contexto?
Respuestas:
Las gramáticas afijadas ( gramáticas parametrizadas libres de contexto) fueron estudiadas ampliamente por el eminente científico holandés en informática Cornelis HA Koster , comenzando con su artículo de 1962 "Basic English, una gramática generativa para una parte del inglés", coescrito con LGLT Meertens. En 1970, produjo un formalismo del concepto; Un resumen útil está disponible en su artículo de 1971 "Affix Grammars for Programming Language", una versión de la cual encontré en Citeseer .
En ese artículo, Koster compara su formalismo (y otro similar) con las gramáticas de dos niveles de Van Wijngaarden , y encuentra que son muy similares.
La invaluable bibliografía anotada de Dick Grune de técnicas de análisis incluye una gran cantidad de otras referencias útiles para gramáticas de afijo y otros formalismos no Chomskyianos. (Consulte la sección 18.2.6 de la bibliografía, aunque hay documentos útiles en otras secciones.) Grune cubre brevemente las gramáticas de los afijos en §15.3.2 de la segunda edición de Parsing Techniques: A Practical Guide (y aún más brevemente en la primera edición) , disponible en línea) mencionando el hecho de que es fácil adaptar las técnicas de análisis de arriba hacia abajo (y otras).
Koster, quien también fue editor del informe Algol 68, fue el desarrollador original del lenguaje de descripción del compilador (CDL) , basado en sus ideas sobre las gramáticas de afijo. Este juego de herramientas y sus derivados posteriores se utilizaron en la producción durante muchos años. Esta página , que encontré con una búsqueda en Google y cuya permanencia no puedo garantizar, tiene enlaces al manual y al sitio de descarga para CDL3.
fuente
Tome el lema de bombeo para CFG :
Toma la gramática
Esto describe un triángulo estelar:
Esto significa que el triángulo estelar no es un lenguaje libre de contexto.
O un ejemplo más simple:
fuente
Nunca he visto este formalismo presentado (incluso en algo como las Técnicas de análisis de Grune ), dependiendo de los detalles sobre cómo se define exactamente "los parámetros deberían ser básicamente analizadores sintéticos" parece mapeable para las gramáticas de dos niveles de Van Wijngaarden, que tienen el mismo poder que gramática de estructura de fase sin restricciones (es decir, más potente que sensible al contexto, podría escribir una gramática VW que ofrezca todos los programas de detención).
fuente