¿QUE ES SEPA!?
En este proyecto nos proponemos diseñar, desarrollar y evaluar un conjunto de herramientas de software que ayude al docente en la enseñanza de las teorías y tecnologías involucradas en los procesos de diseño y construcción de traductores de lenguajes formales. Estas aplicaciones tienen como objetivo facilitarle alestudiante el aprendizaje autónomo de conceptos y procedimientos que implican cierta complejidad, ya que el software brindará feedback visual inmediato de las abstracciones y operaciones fundamentales de los algoritmos utilizados por los traductores para el reconocimiento de lenguajes formales.
La adecuada incorporación de los avances tecnológicos como recursos didácticos posibilitan la adquisición más completa y rápida de conocimientos. Las facilidades que brindan los lenguajes y entornos visuales agilizan el desarrollo de interfaces que permiten representar y modelar gráficamente algunas de las abstracciones que subyacen en el diseño de los lenguajes de programación y en la construcción de los compiladores. Muchos docentes e investigadores creemos que la visualización y animación de programas es una estrategia apropiada para lograr la comprensión íntegra de algoritmos de cierta complejidad.Los resultados positivos obtenidos con algunas experiencias desarrolladas en la cátedra Compiladores e Intérpretes de la Universidad Católica de Santiago del Estero fortalecen aquella hipótesis.
Los prototipos de las herramientas serán probados por las sucesivas cohortes de alumnos de la cátedra, lo que nos permitiráexperimentar, investigar y evaluar empíricamente su capacidad real en ambientes concretos de aprendizaje.
Herramientas para la construcción de Compiladores
Esta es una lista de las herramientas más conocidas para la construcción de compiladores.
Nombre: Lex y Yacc
Descripción: los generadores más populares de analizadores léxicos y sintácticos LALR(1).
Lenguaje: Pascal - C
Download: Turbo Pascal y FPK
Nombre: Flex y Bison
Descripción: versiones mejoradas (generan analizadores más rápidos) de Lex y Yacc.
Lenguaje: C
Download: Linux - DOS
Nombre: BTYacc (Back Tracking Yacc)
Descripción: es una versión modificada de yacc que genera parsers con capacidad de backtracking automático.
Lenguaje: C
Download: DOS
Nombre: BYacc (Berkeley Yacc)
Descripción: es un generador de parsers LALR(1) de dominio público compatible con AT&T Yacc (el Yacc original).
Lenguaje: C
Download:
Nombre: YAY (Yet Another YACC)
Descripción: es un generador de analizadores sintácticos ascendentes similar a Yacc pero con una extensión sumamente importante: soporta gramáticas LALR(2).
Lenguaje: C
Download: DOS
Nombre: ParseGenerator
Descripción: es una IDE (Entorno Integrado de Desarrollo), bajo Windows32, para los generadores AYACC y ALEX, clones de Yacc y Lex respectivamente.
Lenguaje: C - C++
Download: Win32
Nombre: Eli
Descripción: ofrece soluciones a casi todas las tareas relacionadas con la implementación de un lenguaje.
Lenguaje:
Download: ELI
Nombre: COCKTAIL
Descripción: es un conjunto de generadores de programas para casi todas las fases de un compilador. LALR(1) - LL(1) - Generador de ASTs - Evaluador de Atributos - Herramienta de transformación de programas.
Lenguaje:
Download: COCKTAIL
Nombre: PCCTS
Descripción: es un conjunto de herramientas para la construcción de traductores y reconocedores de lenguajes. Comprende tres herramientas: ANTLR un generador de parsers LL(k), DLG un analizador de analizadores léxicos y SORCERER un generador de parsers para árboles que le permite al programador definir la estructura del árbol por medio de una gramática.
Lenguaje:
Download: PCCTS
Nombre: Coco/R
Descripción: es un generador de parsers descendentes.
Lenguaje:
Download: COCO(R)
Nombre: Depot4
Descripción: es un generador de parsers descendentes que soporta especificaciones al etilo de la traducción dirigida por la sintaxis.
Lenguaje:
Download: Depot4
Nombre: LLgen
Descripción: es una herramienta para generar parsers descendentes a partir de una gramática ELL(1). La gramática puede ser ambigua o más general que una ELL(1).
Lenguaje:
Download: LLGEN
Nombre: PRECC
Descripción: es un generador de compiladores para gramáticas dependientes del contexto con infinito lookahead.
Lenguaje:
Download: PRECC
Nombre: RDP
Descripción: es un generador de parsers descedentes para gramáticas LL(1).
Lenguaje:
Download: RDP
Nombre: Visual Parse++
Descripción: provee una interfase visual que permite aprender y utilizar, de manera interactiva, la tecnología de parsing. Genera parsers en C, C++, VBasic y Java.
Lenguaje:
Download: VISUALPARSE++
Nombre: AnaGram
Descripción: es un generador de parsers LALR con resincronización automática en presencia de errores. Usualmente no necesita de un analizador léxico.
Lenguaje:
Download: AnaGram
Nombre: TCLL1
Descripción: es un generador de parsers descendentes para gramáticas LL(1) y LL(k).
Lenguaje:
Download: TCLL1
Nombre: Elegant (recomendado por David Riemens)
Descripción: es un lenguaje orientado a la construcción de compiladores desarrollado por Phillips y puesto a dispocisión del público en 1997.
Lenguaje:
Download: Elegant
Nombre: Cogencee (link recomendado por Peter Evans)
Descripción: generador de parsers descendentes en Delphi.
Lenguaje: Delphi
Download: Cogencee
Nombre: ProGrammar (link recomendado por Norm Wilson)
Descripción: un moderno generador de parsers OO.
Lenguaje:
Download: ProGrammar
Gramáticas
La mayoría de las gramaticas son "yacc-keables" y otras en BNF y EBNF.
Gramáticas "yacc-keables"
Este es un repositorio de gramáticas que pueden ser utilizadas con Yacc y las herramientas compatibles para generar analizadores sintácticos para los siguientes lenguajes:
Ada
Algol 60
Basic (Yabasic)
bc
C
C++
Clipper
Clipper
Clipper
Cobol
Delphi
Dtone
Dylan
Eiffel
Flex
Fortran 77
ftp
Grail
GAWK GNU AWK
HTML
Java
Kew
Matlab
Modula
Moto
Pascal
Oberon-2
SmallTalk
SQL
SQL POSTGRES
VBS (Visual Basic Script)
Yacc
Gramáticas en BNF
Las siguientes son gramáticas en BNF o EBNF
Ada
Jasmin
Oberon 00
URL
VCG
VHDL 93
Trabajos Finales
La siguiente es una lista de los trabajos presentados y aprobados en los años 1995, 1996, 1997, 1998, 1999, 2000, 2001.
1995
Traductor de SmallTalk a Delphi.
Autores: Orlando Jimenez, Rodrigo Julián, Andrés Arias Paz y Roberto Figueroa.
Descripción: el traductor toma como entrada cualquier programa codificado en SmallTalk y lo transforma en el programa equivalente en Delphi. Este trabajo fue presentado en las 26° JAIIO -Agosto de 1997.
Modula3 a Máquina Virtual 1 (MV1)
Autores: Patricia Giménez y Gustavo Rivadera
Descripción: compilador de Modula3 (un lenguaje diseñado por los autores en base a C, Pascal y Modula-2) a un assembler para la máquina virtual MV1 también desarrollada por los autores.
1996
LBOP
Autores: Luciano Biazutti, Raúl Ola y Mario Petersen.
Descripción: LBOP es el nombre de un compilador y un lenguaje. El compilador optimizador multitarget LBOP es capaz de generar código ensamblador tanto de procesadores Intel (x86) como de procesadores Motorola (68000) a partir de programas escritos en el lenguaje LBOP, desarrollado por los mismos autores. Este trabajo fue presentado en las 4tas. Jornadas Universitarias de Informática en el marco del 2do. Congreso de San Juan '97.
1997
Kakuy
Autores: Silvina Colman, Silvia Villalba, Julio "Columbo" Vittar.
Descripción: Kakuy es un traductor que genera diagramas de Chapín (o Nassi-Schneiderman) de programas fuente codificados en ANSI C. Kakuy toma como entrada el archivo .C y genera un programa Pascal (o Delphi) que al ser ejecutado dibuja el diagrama correspondiente al código C del archivo de entrada.
InspectorC
Autores: Irina Argañaráz, Salvador Cavadini, Marcela Tomasini.
Descripción: InspectorC es una herramienta de ingeniería reversa que extrae información (complejidad ciclomática, uso de variables y funciones, árbol de llamada, etc.) de programas escritos en ANSI C y además genera los casos de prueba de camino básico para el programa.
1998
YACC-Editor
Autores: Mariela Gola, Gonzalo Hernández y Gustavo Paiola.
Descripción: Yacc-Editor es más que un simple editor de gramáticas en formato Yacc.
C-Profiler
Autores: Carlos García, Gustavo Bravo y Franco Lospenatto.
Descripción: se desarrolló un profiler de programas C que entre otros datos calcula: cantidad de veces que se ejecuta cada sentencia del programa, tiempo de ejecución acumulado de cada función, tiempo de ejecución global.
GOKÚ
Autores: Celso Kurrle y Roberto Maldonado.
Descripción: GOKÚ es un traductor que soporta programas escritos en C, Pascal, Modula-2, Basic y genera los correspondientes Grafos de Control de Flujo (CFGs), Árboles de Dominancia y Posdominancia. GOKÚ recibe como entrada un programa escrito en cualquiera de los lenguajes antes mencionados y genera los grafos en el lenguaje de definición de grafos DOT.
MJ++ (Métricas para Java)
Autores: Mario Jimenez y René Tesseira.
Descripción: MJ++ es una herramienta capaz de calcular multitud de métricas orientadas a objeto de programas codificados en Java.
Traductor de Pascal a POV
Autor: Fernando Alarcón.
Descripción: este traductor convierte programas escritos en Turbo Pascal que hacen uso de la librería gráfica en programas para la aplicación POV.
Traductor de Pascal a cuádruplas de LBOP
Autores: Claudia Lamas y Daniel Ortega.
Descripción: este traductor transforma programas Pascal en la representación intermedia del compilador optimizador LBOP. Reutilizando el back-end de LBOP, se obtuvo un compilador Pascal capaz de generar código nativo de procesadores Intel 80x86 y Motorola 68000.
1999
PascalWeb
Autores: Silvana Quiroga y Verónica Vilte.
Descripción: es una herramienta que toma un programa en Turbo Pascal y genera una extensa y completa documentación sobre el mismo en formato html.
LEOPW (Lenguaje en Español Orientado a Páginas Web)
Autores: Fabiana Chiquello y Eduardo Graneros.
Descripción: es un traductor que toma como entrada un documento HTML y lo traduce a un lenguaje de diseño de páginas web desarrollado por los propios alumnos (LEOPW), también se desarrolló el traductor que hace el trabajo inverso es decir que traduce desde LEOPW hacia HTML.
2000
CFG-PASCALR
Autor: Luis María Paz.
Descripción: se desarrolló un intérprete de un subconjunto de Pascal (Pascal Reducido) que muestra el diagrama de flujo del programa y el estado de las estructuras de datos. A medida que el programa es interpretado, la información sobre qué bloque de sentencias se está analizando es actualizada en el diagrama de flujo. Esta aplicación está pensada y diseñada para ser utilizada en un curso introductorio de diagramación y programación estructurada.
EduParser
Autor: Fernando Manuel Pachado Sánchez.
Descripción: se intenta construir un generador de una familia de herramientas para la enseñanza y el aprendizaje de la técnica de traducción dirigida por la sintaxis utilizada con el análisis sintáctico ascendente. Las aplicaciones generadas visualizan el proceso de reconocimiento shift-reduce de las hileras de entrada, mostrando paso a paso los estados de las pilas (sintáctica y semántica) mientras se ejecutan acciones semánticas sencillas que posibilitan operar y sintetizar atributos, imprimir resultados, generar tuplas, realizar operaciones aritméticas y otras tareas típicas de los procesos de traducción.
Turbo-Web
Autores: Silvina Aicardi, Andreina Porchietto y Laura Guanchiale.
Descripción: Se pretente definir un lenguaje propio, que permita a usuarios finales construir sitios Web en base a objetos predefinidos por un programador. El compilador trabajará en base a dos módulos: Turbo Web Library, donde un usuario programador especificará las distintas librerías con diferentes objetos para proporcionarle al usuario un conjunto de "templates" para el diseño de sus páginas y Turbo Web User, que será utilizado por el usuario final quien haciendo uso de las librerías ya predefinidas, podrá personalizar el contenido de las diferentes páginas/objetos y generar sus páginas web. La documentación de Turbo-Web está disponible aquí y las diapositivas de la presentación del trabajo aquí.
DMSBB
Autores: Jorgelina Danna, Diego Mariani, Claudia Secco, Marcelo Bertola, Carlos Blanche.
Descripción: se intenta construir una herramienta que parte de un modelo de datos generado por la herramienta CASE denominada VAW (Visible Analyst Workbench) y genera código (Visual Fox Pro y Visual Basic) para realizar las operaciones de Altas, Bajas y Modificaciones sobre las tablas representadas por el modelo de datos.
CCS Educativo
Autoras: Sandra Andreis, Carina Bruneri, Cristina Pronotti.
Descripción: se intenta construir una aplicación que genere diagramas de Chapin a partir de código fuente Pascal. Además contará con funcionalidades orientadas a la asistencia en la enseñanza de programación estructurada en Pascal.
Transformix
Autores: Darío Karchesky, Araceli Rocca, M. Mercedes Savelli.
Descripción: se intenta construir un traductor de archivos de datos que permita: definir el formato de distintos archivos de entrada, definir el formato de distintos archivos de salida, definir la correspondencia de formatos de archivo, definir las transformaciones de datos que se deben aplicar a los archivos de entrada para obtener el archivo de salida. El traductor tomará los archivos de entrada, determinará a qué formato de entrada corresponde, lo asociará al formato de salida seleccionado y aplicará las transformaciones necesarias para obtener el archivo de salida.
M2S2
Autores: Marcelo Almarante, Sebastián Daniele, Sonia Gor, Mónica Otterstedt.
Descripción: el programa toma como entrada un proyecto Delphi 5.0 y a partir de los archivos contenidos en el mismo genera la documentación del mismo. La documentación generada consiste en las referencias cruzadas de: la estructura del proyecto y la estructura de bases de datos.
GParsing (Parsing General)
Autores: Martha Abutti, Pablo Berdaguer.
Descripción: se construyó un soft que muestra de forma animada el funcionamiento de los métodos generales de parsing de Earley e YCK .
AF al Ataque!
Autor: Diego Alejandro Cheda.
Descripción: AF al Ataque! es una herramienta orientada a la enseñanza y aprendizaje de Gramáticas Regulares, Autómatas Finitos y Expresiones Regulares. Este software permite observar fácilmente la equivalencia entre dichas representaciones. A partir de una Gramática Regular, Autómata en Formato Matricial o Expresión Regular es posible obtener: gramática y definición formal de la misma; AFND, AFD y AFDEM (definición formal, representación matricial y diagrama de transición) y Expresión Regular que define el lenguaje. Permite, también, introducir una cadena, ver una animación del autómata a medida que va reconociéndola y determinar si la misma se acepta o rechaza.
2001
Lenguaje de Manipulación de Efectos Lumínicos (LMEL)
Autor: Bruno R. Toscano.
Descripción: LMEL es un lenguaje y un compilador diseñados por el autor con el objetivo de proporcionar al usuario final un desarrollador de efectos lumínicos lo más flexible y potente posible.
Software Derivador de Funciones Matemáticas
Autores: Álvaro Fernando Domínguez y Alida Fabiola Fernández.
Descripción: Este software está pensado para ser utilizado como herramienta didáctica, para la enseñanza del cálculo de la derivada de una función en un punto. Utiliza en su primera etapa un reconocedor de funciones que determinará si la misma ha sido cargada adecuadamente. En su etapa intermedia, el programa, calcula paso a paso la derivada enésima de la función. Y en su etapa final, para el caso de la primera derivada, se procede a graficar la función y su derivada en un punto.
CRISOL
Autores: Sebastián González y Ricardo Quiñonez.
Descripción: CRISOL es un lenguaje y su correspondiente compilador. El lenguaje CRISOL es de tipo imperativo multiprocedural y cuenta con las estructuras de control típicas como while-do, repeat-until, if-then-else, case. El compilador CRISOL toma como entrada un programa escrito en el lenguaje CRISOL y genera un archivo que, luego de ser procesado por el generado Jazmin (de dominio público y gratuito), produce un archivo .class listo para ser ejecutado en una Máquina Virtual Java (JVM).
