DEV Community

RodrigoZea
RodrigoZea

Posted on • Updated on

Día 2 de Proyecto

NOTA: No es el día 2 como tal, pero es el día que considero haber hecho un avance decente.

Estuve teniendo dificultades en qué enfoque utilizar para implementar las características de DECAF en el proyecto. Comenzando con las características acordadas por el grupo, comencé a ver sobre la siguiente: num en la declaración de un arreglo debe ser mayor a 0.

Intenté resolverlo desde la gramática (el archivo g4) pero se complicaba o se podían dar problemas al ejecutarlo con Python, por lo que descarté esta idea.

Luego, encontré sobre ErrorListeners y ErrorStrategy en ANTLR, por lo que intenté utilizar esto pero se complicó bastante. No es por decir que no era una solución, pero no era efectiva, además investigando las personas decían que "se debía poseer conocimientos nivel de investigador de compiladores" para hacer un ErrorStrategy apropiado, por lo que opté a ver otra manera.

La última opción, la cual fue la que elegí, fue utilizar el Listener proveído por ANTLR. ANTLR tiene dos maneras de generar el recorrido a través del árbol, una es a través de Listeners y otro es a través de un Walker. La opción que escogí fue la de Listener, así que tengo el control de saber cuándo se está entrando a cierto nodo, por ejemplo, a una declaración de variable, que era lo que justamente necesitaba.

Entonces, con un listener custom, manejo la entrada a la declaración de variable, identifico el número y observo si este es 0, si es así, entonces se añade a la lista de errores y se levanta una excepción.

Considero que es un buen avance, para implementar las otras reglas, seguiré un approach parecido.

Top comments (0)