El Analizador Gramática del motor ( PGE , originalmente el loro Gramática del motor ) es un compilador y el tiempo de ejecución de reglas de Raku de la máquina virtual loro . [1] PGE usa estas reglas para convertir una gramática de expresión de análisis en código de bytes Parrot . Por lo tanto, está compilando reglas en un programa, a diferencia de la mayoría de las máquinas virtuales y tiempos de ejecución, que almacenan expresiones regulares en un formato interno secundario que luego es interpretado en tiempo de ejecución por un motor de expresiones regulares. El formato de reglas utilizado por PGE puede expresar cualquier expresión regular y la mayoríagramáticas formales , y como tal forma el primer eslabón en la cadena del compilador para todos los lenguajes frontales de Parrot.
Cuando se ejecuta, el código de bytes generado por PGE analizará el texto como se describe en las reglas de entrada, generando un árbol de análisis. El árbol de análisis puede manipularse directamente o introducirse en la siguiente etapa de la cadena de herramientas del compilador Parrot para generar un AST a partir del cual se pueda generar el código (si la gramática describe un lenguaje de programación).
Historia
Originalmente llamado P6GE y escrito en C, PGE fue traducido al nativo Parrot y renombrado poco después de su lanzamiento inicial en noviembre de 2004. Su autor es Patrick R. Michaud. [2] PGE fue escrito con el fin de reducir la cantidad de trabajo requerido para implementar un compilador sobre Parrot. También fue escrito para permitir que Perl 6 se auto-hospede fácilmente, aunque el desarrollo actual de Pugs ya no usa PGE como su back-end de reglas primarias en favor de un motor nativo llamado PCR. [3]
Internos
PGE combina tres estilos de análisis:
- Reglas de Raku
- un analizador de precedencia de operadores
- subrutinas de análisis personalizadas
La forma principal son las reglas de Raku, por lo que una regla PGE podría verse así para una gramática de solo adición:
término de la regla { | úmero>\ ( \) } número de regla { \ d + } regla expr { ('+' ) * érmino> érmino> }
El analizador de precedencia de operadores permite crear una tabla de operadores y utilizarla directamente en un analizador de estilo de reglas de Perl 6 de la siguiente manera:
regla expr es optable { ... } término de regla { | úmero>\ ( \) } número de regla { \ d + } proto término: es precedencia ( '=' ) se analiza ( & término ) {...} proto infijo: + es más suelto ( 'término:' ) {... }
Esto logra el mismo objetivo de definir una gramática simple, solo de adición, pero lo hace usando una combinación de reglas / expresiones regulares de estilo Raku para term
y number
y una opción shift-reduce para todo lo demás.
Codigo de GENERACION
Aunque PGE genera código que analizará la gramática descrita por una regla y se puede usar en tiempo de ejecución para manejar gramáticas simples y expresiones regulares que se encuentran en el código, su propósito principal es analizar lenguajes de alto nivel .
La cadena de herramientas del compilador Parrot se divide en varias partes, de las cuales PGE es la primera. PGE convierte el código fuente para analizar árboles . El Tree Grammar Engine (TGE) luego los convierte en Parrot Abstract Syntax Trees (PAST). Una segunda pasada de TGE convierte un PASADO en Árboles de sintaxis de código operativo de Parrot (POST) que se pueden transformar directamente en un código de bytes ejecutable.
Referencias
- ↑ Michaud, Patrick R. (22 de noviembre de 2004). "Parrot Grammar Engine (PGE)" . Archivado desde el original el 20 de diciembre de 2005.
- ^ Michaud, Patrick R. (8 de noviembre de 2004). "Primera versión pública del motor gramatical" .
- ^ "Agente Zhang" (17 de septiembre de 2006). "PCR reemplaza a PGE en Pugs" .
enlaces externos
- "Analizadores, reglas de Perl 6 y Parrot Grammar Engine" . 2006-06-28.