Parser generators

      No Comments on Parser generators

En un fin de semana de tres días de supuesto asueto en el que, a saber, he dado un pasito más en el desarrollo de las nuevas plataformas para BABEL terminando un servidor de nombres distribuido, he arreglado un poco el sistema de estadísticas que usamos para las descargas de nuestros papers, he revisado un paper de próximo deadline, y he planificado más o menos un par de proyectos fin de carrera (luego volvemos a hablar de la cantidad de vacaciones que tienen los profesores 🙂 ), vuelvo a retomar el siguiente paso para BABEL y voy revisando generadores de parsers para el lenguaje BDL, un subconjunto del IDL de CORBA definido por nosotros, porque el que tenía hecho con Bison no me gustaba mucho dada la cantidad de capas que necesitaba encima para pasarlo a C++.

En el proceso he encontrado una bonita tabla de parser generators aquí, y revisando los que generan directamente C++ y son LALR (aunque probablemente BDL no necesite tanto), al final me he quedado con Bisonc++ (no confundir con Bison++, que genera código un poco más lioso y no está nada documentado). Bisonc++ es muy parecido a Bison y Bison++, pero genera directamente una clase, con lo que me limpia un poco el código que tenía, y tiene una documentación completa adaptada de la de Bison. Viene en los repositorios de Ubuntu, así que qué más se puede pedir…

Pues que me quite más trabajo que el que me quita, que ahora mismo es bastante pero menos del que querría: me evita la interpretación de ficheros BNF y la generación del parser, pero sigue siendo demasiado lío sacar simplemente el árbol sintáctico de un trozo BDL (que sólo contiene declaraciones de datos), porque al tener las acciones mezcladas con las reglas sintácticas tienes que ir construyendo tú el árbol, y además si necesitas una tabla de símbolos te la tienes que hacer también tú.

Podría estar la cosa más avanzada en estos asuntos, digo yo…

P.D.: En el camino he encontrado una implementación de árboles compatible con STL que tiene una pinta decente.

Facebooktwitterredditlinkedintumblrmail