Índice de secciones
- Introducción a ANTLR v3
- Estructura general del sistema
- Especificación de FKScript
- Análisis léxico y sintáctico de FKScript
- Análisis semántico de FKScript
- Especificación de FKIL
- Generación de código de FKScript
- Ensamblador de FKIL
- Máquina virtual de FKScript
- Libro Proyecto FKScript (PDF)
Introducción al proyecto FKScript
Después de mucho tiempo jugando con las versiones beta de ANTLR v3, con la reciente publicación de su versión definitiva me decidí a terminar un proyecto personal que tenía entre manos desde hace unos meses. En éste me surgió la necesidad de incorporar algún método que permitiera la ejecución de pequeños scripts para automatizar determinadas tareas. Esta situación resultaba inmejorable para experimentar un poco con herramientas de generación de compiladores y máquinas virtuales, por tanto olvidando una vez más la regla de no reinventar la rueda me propuse construir desde cero todo lo necesario para conseguir la ejecución de scripts en mi proyecto. Los requerimientos del lenguaje de script y la máquina virtual a implementar son sencillos:
- El programa principal se escribirá en un solo fichero y estará formado por una sola función principal, es decir, no será necesario la implementación de llamadas a funciones internas (aunque no se descarta su inclusión en futuras versiones).
- Las variables del lenguaje tendrán un tipo declarado de forma explícita y se deberá comprobar en tiempo de compilación que han sido declaradas y que sus tipos concuerdan dentro de una expresión o una asignación.
- Deberán existir los siguientes tipos: entero, real, lógico y cadena.
- El lenguaje deberá proporcionar las instrucciones clásicas: asignaciones, condicionales y bucles.
- El lenguaje deberá proporcionar las expresiones aritméticas y lógicas básicas.
- La máquina virtual se debe poder integrar fácilmente con cualquier aplicación que exponga una API, y desde el programa script se podrá interactuar con esta aplicación mediante llamadas a las funciones de esta API.
Dado que existe aún poca documentación sobre ANTLR 3, y mucho menos en español, voy a publicar aquí a modo de ejemplo todos los pasos necesarios para construir el sistema propuesto. Espero que este material pueda resultar útil para aquellos que se propongan desarrollar un sistema similar.
El nuestro estará escrito completamente en C# y estará formado por los siguientes módulos:
- Un compilador que transformará el código script a un lenguaje intermedio.
- Un ensamblador que generará el fichero binario ejecutable a partir del código intermedio.
- Una máquina virtual capaz de ejecutar el fichero generado por el ensamblador.
ANTLR será usado para construir el compilador, que estará formado a su vez por los analizadores léxico y sintáctico, un analizador semántico para el cálculo y comprobación de tipos, y un generador de código a partir del árbol de sintáxis abstracta (AST) construido durante las fases anteriores. Por su parte, tanto el ensamblador como la máquina virtual se escribirán sin utilizar ninguna herramienta de apoyo, dado que son relativamente sencillos de implementar.