Práctica: Analizador Descendente Predictivo Recursivo. Desde Lenguajes de Infijo a EGG Virtual Machine
Descripción
Diseñe un lenguaje de programación sencillo (Sintáxis convencional a la C/BASIC/JavaScript/...). Escriba un analizador sintáctico que genere árboles de análisis abstracto que conformen a los usados por el intérprete del lenguaje Egg.
Posibles puntos de partida
- Buenos puntos de partida
- Tiny-C
- Un subconjunto hiper-minimal de C con un compilador y una VM escritas en C.
- Contiene un lexer
- Un parser PDR que construye un AST
- Un generador de código para una VM
- Un intérprete para la VM
- Syntax of Mini-Pascal
- Tiny-C
- Sencillos
- Dos vídeos en YouTube implementando una sencilla calculadora en C usando la técnica PDR. Si estas empezando
- Tiny Basic. Muy sencillo
- Niklaus Wirth's PL/0 in the Wikipedia. Sencillo
- Complicados pero posibles
- The C Proggaming Language léase la descripción de la gramática de C. Páginas 234 a la 239
- Irie Pascal Grammar
- Mucho trabajo. Complicados:
Posiblemente las mas recomendables para empezar son Tiny-C y Mini-Pascal. Después puede usar las otras para responder a la pregunta ¿como amplío el lenguaje con ...?
Requisitos
- Escriba la gramática de manera que sea procesable por un ADPR. Puede usar los operadores
*
y+
dentro de la gramática para indicar repeticiones - Escriba el analizador sintáctico para dicho lenguaje. Deberá devolver el árbol de análisis sintáctico conforme a los árboles usados por el intérprete Egg
- El lenguaje debe tener
- declaraciones (aunque no tiene que ser necesariamente tipeado). Esto es, deberían poder declararse objetos como variables, constantes y funciones
- sentencias
if
, condiciones
comoa <= b
,asignaciones
,- alguna forma de bucle,
funciones
y llamadas a funciones,- etc.
- La gramática deberá disponerse de forma que sea analizable por un PDR
- Escriba pruebas para el código desarrollado
- Use integración en la nube (Travis/ CircleCI)