Entradas

Mostrando entradas de agosto, 2021

Construyendo el compilador Parte III: ANTLR V4, Listener vs Visitor y la tabla de Símbolos

Imagen
 Es importante destacar que en ocasiones no sabemos la orientación o guia que debemos tener. Pues bien, cuando empecé el proyecto de armar un compilador, no tenía entendido a cabalidad la parte del papel que tendría la tabla de simbolos acá.  La tabla es el símil del disco duro. Los métodos y el recorrido del árbol nos permiten acceder a los nodos pero esto es "volátil" similar a la memoria ram de una computadora. Entonces, es válido el poder decir que esta metáfora ayuda a visualizar el papel de la tabla de símbolos. Pero, ¿porque es volátil los métodos? Resulta que ANTLR V4 probee dos formas de recorrer un árbol: listeners y visitor. Listener: permite recorrer automáticamente el árbol, y provee de métodos de "entrada" y "salida" de cada regla definida en la gramática. Visitor: da mas control al momento de iterar el árbol, pero no se recorre automáticamente sino en el orden indicado. Yo preferí trabajar con listener. Debido a que es mas sencillo y simple ...

Construyendo el compilador Parte II: ANTLR V4 y Python

 Python y ANTLR V4 (cuatro versiones, si, lo repito) Bienvenidos a otro POST de mi blog  Compiladores, café y curiosidad. Las tres "C" de mi vida.  Esta semana la entrada no será tan técnica, bueno un poco nomás. Quisiera mostrarle al lector las bondades de usar ANTLR con Python 3, las cuales pueden llegar a ser muchas dependiendo el lugar y el amor que le tengamos al lenguaje.  ANTLR originalmente solo compila y genera el lexer y el parser para el lenguaje JAVA. Esta configuracion por defecto hace que podamos "casarnos" con JAVA o buscar una alternativa. He experimentado los ultimos meses con Python a una escala mayor. De manera que me siento mucho más comodo con ese lenguaje. ANTLR es bondadoso, y nos permite cambias de lenguaje con tan solo especificar un parametro al momento de generar la gramática.  En especial, es este parámetro. antlr -Dlanguage=Python3 decaf.g4 Como vemos, es sumamente sencillo lograr un cambio en el lenguaje target que generamos. Esto s...