Un poco de todo lo relacionado al area de la informatica... programacion, ocio, configuraciones, en fin herramientas que pueden ser utiles para un estudiante de ingenieria en ciencias y sistemas.

viernes, 5 de diciembre de 2014

On 12:45 by Unknown in , ,    No comments
¿Que es?

Es un generador de parsers orientada a las herramientas de .net.
Se integra de manera sencilla con C#.

La ventaja que tiene con respecto a herramientas como CUP  o Bison es que en Irony se programa directamente en codigo de C#, es decir que no necesitamos escribir la gramatica en texto plano como las herramientas anteriores para luego generar el parser o crear un skeleton (como en gold parser) para poder trabajar sobre nuestra gramatica sino que la gramatica y sus acciones son archivos con codigo de C#.

Una desventaja es que no se encuentra mucha documentacion, sino que hay que buscar bastante cuando se tiene algun problema con la herramienta o en la parte de colocar las acciones a la gramatica, no hay ejemplos en donde se pueda ver como hacerlo por lo que esta es la parte compleja de utilizar la herramienta, la falta de informacion.

¿Como funciona?
Practicamente para trabajar con Irony lo que se hace para aplicar acciones a la gramtica es recorrer el arbol sintactico que nos genera. Suena muy vaga la descripcion pero es lo que se debe hacer, ya que practimente al parsear un texto con nuestra gramatica en Irony lo que hace es que genera un arbol sintactico al cual le vamos a asociar las acciones que necesitemos, lo del recorrido no es mas que ir agregando acciones a las producciones y llamando al metodo de forma recursiva (en la parte 2 se mostrara un ejemplo).

En conclusion Irony es una herramienta muy buena que permite realizar parsers de forma rapida, quizas al principio se siente que es dificil pero esto es debido a que es un pardigma distinto al que se acostumbra a trabajar en la universidad (USAC) en donde solo se trabaja con CUP o con Bison y en ocaciones gold parser.


A continuacion el link con la documentacion sobre irony.

Irony WikiBook

Ejemplo

Ahora a lo que interesa que es el ejemplo, este pequeño ejemplo es una aplicacion de consola que lo que hace es imprimir el arbol generado por Irony en orden, preorden y postorden.
Lo que realiza la aplicacion no es lo mas importante en este casi sino la forma en que trabaja Irony y como se construye una gramatica.

El ejemplo consta de 3 clases, la gramtica, la clase para compilar la gramatica y la clase principal para ejectutar el programa.

Clase Gramatica



En esta clase se declara la gramtica que vamos a utilizar, se puede observar que se declaran los terminales, los no terminales y luego las reglas de produccion. Esto es Similar a CUP lo unico que cambia es la sintaxis y la  forma de declaracion ya que en una misma clase declaramos los no terminales y los no terminales sin necesidad de utilizar alguna otra herramienta para el analisis lexico.
Como se puede ver al final de las producciones se debe indicar this.root = <no terminal inicial>  , es decir que se debe de indicar el No terminal que da inicio a nuestra gramatica.

Clase Compilar


Solamente se muestran los dos metodos que tienen que ver especificamente con el funcionamiento de Irony.

El primer metodo solamente verifica que el texto a parsear sea valido y el 2do obtiene la raiz del arbol generado una vez parseado el texto.

Por ultimo en la clase principal se llaman los dos metodos de la clase anterior, primero se verfica que la cadena sea valida y si esto se cumple se llama al metodo getRoot.

A continuacion dejo el link con la aplicacion con el codigo completo.

 Aplicacion

Requisitos para ejecutar:
Al descargar Irony veran que es un proyecto el cual se debe compilar y esto genera un .DLL el cual debe agregarse como referencia en el proyecto de C#.

En la aplicacion ya va generado el dll el cual se compilo con la version de Vstudio 2013 Express, por lo que en alguna version anterior de Vstudio puede dar error.

VStudio 2013 (El dll de irony utilizado se compilo en esta version.)
.Net Framework 4.5 o posterior.


En la parte 2 se publicara un ejemplo en donde se mostrara como asociar acciones sencillas a una gramtica  y en la parte 3 un ejemplo sobre como añadir acciones a una gramatica compleja utilizando una estructura de arbol recursivo.



0 comentarios:

Publicar un comentario