Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

miércoles, 22 de abril de 2009

Ironías de la vida

Hace tiempo “regresé” a los tiempos de la carrera al llevar a cabo un trabajo relacionado con ASN.1, ya que estaba relacionado con el análisis léxico y sintáctico de definiciones llevadas a cabo usando esta notación. Aunque las asignaturas relacionadas con este campo más formal de los lenguajes de programación no eran las que más me apasionaban, lo cierto es que llegaron a gustarme bastante en su día, y comprobé la evolución que habían sufrido herramientas de análisis sintáctico y semántico, como los clásicos lex y yacc, e incluso sus “descendientes” Flex/Bison o JFlex/Cup, para llegar a un generador de analizadores como el potente ANTLR, capaz de generar un analizador léxico, sintáctico o semántico en varios lenguajes (Java, C#...) a partir de una serie de reglas EBNF.


Así las cosas, no es de extrañar que, unos meses después investigase un poco más por mi cuenta en este campo, y me encontrase con una interesante herramienta que, de manos de Roman Ivantsof, tenemos disponible en Codeplex. Se trata de Irony.NET, un generador de compiladores/interpretes para los lenguajes definidos a partir de una gramática. Hasta aquí, nada novedoso. Pero lo interesante es que las gramáticas LALR(1) se definen directamente en C#, utilizando las clases que la propia plataforma proporciona, usando claro está notación BNF. A partir de esta definición de la gramática, puede generarse el árbol sintáctico de una entrada en dicho lenguaje. Por ejemplo, un SELECT de SQL quedaría definido así:



La distribución de la herramienta, al estar en Codeplex, es a partir de su código fuente, por lo que podemos bajar la solución completa para estudiarla y ejecutarla. Incorpora varias gramáticas definidas como ejemplo, entre las que se incluyen lenguajes tan suculentos como C#, Ruby o Python, e incluso SQL y JSON.


Si ejecutamos el proyecto de prueba Irony.GrammarExplorer, podemos “cargar” la DLL con las gramáticas definidas en el proyecto Irony.Samples como si de un plugin se tratase, así comoactivarlas y desactivarlas.



Incluso es posible escribir código en el explorador y estudiar la generación de código y del árbol de sintaxis abstracta para la entrada. tanto en forma de árbol "visual" como en XML:




Todo un descubrimiento que puede ayudarnos a mejorar nuestro conocimiento sobre la generación de compiladores e intérpretes de lenguajes, así como a crear los nuestros propios. ¿Qué tal un parser para aventuras conversaciones, como los clásicos PAWS o Inform? ;)

No hay comentarios:

Publicar un comentario