1. NOMBRE: Andrés Dávila M.
FECHA: 23-07-2020
MATERIA: Compiladores
Intérprete sencillo utilizando Irony y C#
• Descripción del proyecto de compiladores
Se desarrolla un intérprete sencillo que permite ejecutar un archivo de entrada que
contiene sentencias tales como declaración de variables, sentencias de control,
impresiones en consola, etc. El lenguaje de programación fue diseñado especialmente
para este ejemplo.
• Tecnologías utilizadas en el proyecto de compilación
✓ Irony : Generador de analizadores léxicos y sintácticos que retorna un AST
(Abstract Syntax Tree).
✓ Visual Studio 2017: Entorno de desarrollo integrado utilizado para programar
en C#.
✓ Windows 10 : Sistema Operativo.
✓ Irony.dll : DLL que permite la integración de Irony con C#.
• Pre-requisitos
Obtención del archivo Irony.DDL
Crear un proyecto en Visual Studio 2017
• Conceptos básicos de Irony
✓ ParseTree: AST devuelto por Irony que será posteriormente recorrido y
analizado.
✓ ParseTreeNode: Cada uno de los nodos del ParseTree, el atributo mas
importante de este nodo es:
➢ ChildNodes: Atributo de cada ParseTreeNode, este atributo es de tipo
Array y contiene todas las cualidades de una lista, tales como Count,
ElementAt, etc. Si esta lista esta vacía significa que el nodo es un nodo
hoja, caso contrario es un subárbol.
• Pasos para crear el producto de compiladores
Descargar el repositorio completo de Irony desde GitHub.
2. El proyecto de Irony anteriormente mencionado es un proyecto de C#, el cual
contiene la aplicación de Irony, sin embargo, a nosotros únicamente nos interesa
las librerías que este proyecto genera
Debemos agregar la librería a nuestro proyecto en Visual Studio en el apartado
de Referencias.
El código de nuestro proyecto está organizado en dos paquetes:
o analizador: que contiene los archivos de Irony.
o arbol: que contiene todas las clases que forman parte del AST, que se
utiliza como estructura primaria en la aplicación.
Agregamos la clase Gramatica.cs
➢ ER: Expresiones regulares de los tokens que nuestra gramática reconocerá.
➢ Terminales: Conjunto de terminales que serán utilizados en nuestra gramática,
que no fueron aceptados por ninguna de las expresiones regulares definidas
anteriormente.
➢ No terminales: Conjunto de no terminales que serán utilizados en nuestra
gramática.
➢ Gramática: Región donde se define la gramática.
➢ Preferencia: Configuraciones especiales necesarias para el uso de Irony.
3. Agregamos clase Sintactico.cs
➢ El método analizar para cargar el árbol y disparar el recorrido de dicho árbol a
través de una llamada al método instrucciones a la que se le manda el nodo raíz
del árbol.
➢ El no terminal “instrucciones”, contaba con 2 posibles producciones, una en la
cual tenia dos hijos y en la otra solamente uno, con esta información y usando la
propiedad ChildNodes, hacemos el recorrido de esa producción, haciendo
llamadas a otras funciones según el no terminal encontrado.
➢ Para la producción de “expresion”, debemos plantear condiciones para
determinar qué producción se está reconociendo, estas condiciones pueden
basarse en la cantidad de hijos de la producción.
Árbol de análisis abstracto AST
Un árbol de sintaxis abstracta (AST) es una representación simplificada de la estructura
sintáctica del código fuente. A nivel de programación un AST es una estructura de datos
que se genera durante el proceso de análisis sintáctico.
Interpretación del archivo de entrada
Esta interpretación se ejecuta dentro del método Main de la clase “Program” que se creo
automáticamente en nuestro proyecto.
En esta clase se importa la referencia a la carpeta analizador para poder usar la clase
Sintactico recién creada:
Y en el método Main encontramos lo siguiente:
string text =
System.IO.File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirect
ory, @"....input", "entrada.txt"));
Sintactico sintac = new Sintactico();
sintac.analizar(text);
4. Cargar el contenido del archivo “entrada.txt” que debe ser creado dentro de la
carpeta /input que también debemos crear dentro de nuestro proyecto.
Crear el analizador sintáctico a utilizar.
Analizar el texto del archivo de entrada.
• Cuál es el producto que se obtiene con esta investigación
5. • Fuentes consultadas
Navarro, E. (07 de 08 de 2019). ICARUS. Obtenido de https://ericknavarro.io/2019/08/07/22-
Interprete-sencillo-utilizando-Irony-con-CS/