Herramientas para el desarrollo de interpretes y compiladores
De WikiBCE
Contenido |
SLR1
La herramienta para generar analizadores sintácticos LR(1) Simples y analizadores lexicográficos a partir de una gramática y expresiones regulares se llama SLR1. Actualmente está en la versión 2.4 y hay disponibles binarios para Linux 32 y 64 bits y para Windows (32 bits, XP y posterior). La interfase en pantalla fue hecha con wxWidgets.
- SLR1 v 2.4 para Win32 - 28 Ago 2008
- SLR1 v 2.4 para Linux 32 bits (i686) - 28 Ago 2008
- SLR1 v 2.4 para Linux 64 bits (x86_64) - 28 Ago 2008
- SLR1 v 2.4 para FreeBSD 8.0 CURRENT (i686) - 30 Oct 2008
- Código fuente de SLR1 v 2.4 - 26 Set 2008
SLR1v2 es un solo ejecutable. Debe descompactar en la carpeta deseada y luego arrancar el programa.
En linux está compilado contra glib 2.0. Consultar si no funciona. Fue probado en Fedora 9 y 10 de 32 bit, Fedora 10 de 64 bit y Ubuntu 64 bit.
En FreeBSD fue compilado con las herramientas de gnu, gmake, y glib 2.0. Se agradece la colaboración del alumno Tobias Grosser <tobi-grosser@web.de> que se encargó de compilar y probar. La biblioteca BCE fue recompilada con CodeBlocks para FreeBSD.
La documentación la debe descargar de aquí. El manual está en formato Open Document. Abrir con OpenOffice.org Writer, con AbiWord o con algún otro editor de textos que abra el formato .odt.
Si va a usar otro sistema operativo, usar los fuentes (slr1v2-src.zip). En la carpeta slr1v2db hay un proyecto de DialogBlocks que le permitirá generar compilar y generar el ejecutable. Al DialogBlocks lo puede bajar de aquí. Informar casos de éxito en la compilación en otros sistemas operativos a domingobecker@gmail.com.
BCE
BCE es la biblioteca de soporte. Significa Biblioteca de Clases Extendidas. Versiones disponibles:
- Biblioteca BCE para Linux 32 bits (i686) - 28 Ago 2008
- Biblioteca BCE para Linux 64 bits (x86_64) - 28 Ago 2008
- Biblioteca BCE para Win32 - 28 Ago 2008
- Código fuente de la BCE al 27 Set 2008 - 27 Set 2008
Solamente descompactar preservando el nombre de las carpetas y usar. Si usan zip disponible en linux y en windows, hacer
unzip bce-xxx.zip
y les va a crear las carpetas con la biblioteca BCE. En bce/include están los .h y en bce/lib está la biblioteca estática compilada. Agregar esos directorios a CodeBlocks o a su IDE de preferencia.
Está compilada con GNU C++ usando CodeBlocks como IDE. Especificar bce en la lista de bibliotecas a encadenar en el proyecto de CodeBlocks. Especificar -lbce si compila a mano.
Si va a usar otro sistema operativo, usar los fuentes (bce-src-xxx.zip). En la carpeta bce/fuentes/bcelinux hay un proyecto de CodeBlocks que le permitirá generar la biblioteca libbce.a en bce/lib. Ese proyecto usa la configuración predeterminada del compilador GNU C++, que es muy portable, normalmente no hay que tocar nada para recompilar en otro sistema operativo. Informar casos de éxito en la compilación en otros sistemas operativos a domingobecker@gmail.com.
Se ha confirmado la compilación de la BCE en FreeBSD 8. Fue usada para construir el SLR1v2 para FreeBSD mencionado más arriba.
Ejemplos de Uso de las Herramientas
Los ejemplos de usos de las herramientas pueden estar parcial o totalmente bloqueados durante el dictado de la Cátedra en la Universidad Católica de Santiago del Estero. La razón es obvia: los prácticos son similares a los ejemplos presentados aquí.
Los que puede consultar porque ya fueron vistos en clase, están a continuación.
Un pequeño compilador
Un traductor que genera código ensamblador para una máquina hipotética. Se implementan las operaciones sumar y restar.
Objetivos: que el alumno vea cómo se implementan las acciones semánticas para un esquema de traducción para un traductor (valga la redundancia) implementado con la técnica LR(1) Simple con la herramienta SLR1. El esquema de traducción debe generar código ensamblador en la salida estándar.
Un pequeño intérprete
Un intérprete que ejecuta las operaciones indicadas por la oración de entrada del lenguaje fuente. El lenguaje fuente es para una calculadora que suma y resta números enteros.
Objetivos: que el alumno vea cómo se implementan las acciones semánticas para un esquema de traducción para un intérprete implementado con la técnica LR(1) Simple con la herramienta SLR1. El intérprete debe imprimir en la salida estándar el resultado de la operación, caso contrario indicar dónde está el error de sintaxis o léxico.
Un pequeño intérprete para números fraccionarios
Un intérprete que ejecuta las operaciones indicadas por la oración de entrada del lenguaje fuente. El lenguaje fuente es para una calculadora que suma y resta números fraccionarios.
Objetivos: aplicar el concepto de "Estructura de Datos" visto en materias de años anteriores y construir una clase que implemente los números fraccionarios en memoria, y mediante la sobrecarga de operadores habilitar el uso de los operadores + y - binarios para poder reusar las acciones semánticas del ejemplo anterior.
Este ejemplo forma parte de un práctico que deben presentar los alumnos en estos días, por lo que no se puede consultar hasta nuevo aviso.
Imprimir una lista de precios en Excel
Se tiene un archivo en excel con una lista de precios. El trabajo que hay que hacer es un traductor que imprima esa lista de precios en formato texto, sin tocar para nada el excel y usando solamente software libre.
Objetivos: aplicar la teoría de los lenguajes formales para resolver un problema de la vida real de acceder a un archivo en excel sin usar el Excel (valga la redundancia).
Este ejemplo forma parte de un práctico que deben presentar los alumnos en estos días, por lo que no se puede consultar hasta nuevo aviso.
Estructuras de Control de la Ejecución
Este ejemplo muestra la estructura base de generación de código para las estructuras básicas de control de la ejecución de programas. El lenguaje fuente es el mismo del ejemplo Un pequeño compilador con las reglas agregadas para dar soporte a las estructuras de control de la ejecución.
Objetivos: que el alumno conozca la estructura básica del código intermedio generado para las estructuras básicas de control de la ejecución, que son el "mientras condición hacer sentencias", el "hacer sentencias hasta condición" y el "si condición sentencias sino sentencias". El esquema de traducción debe generar código ensamblador en la salida estándar.
Contacto: domingobecker@gmail.com
