Mi anagrama

Herramientas de compiladores

El pico y la pala del que desarrolla compiladores (y también otros programas que no son exactamente compiladores).

 


En esta página

Introducción

flex + bison (lenguaje C)

TP lex&yacc (lenguaje Pascal)

JLex + CUP (lenguaje Java)

Otras herramientas y enlaces

GeLLCo

Viene de

Compiladores


Índice general

Principal

Noticias

Direcciones

Detalles (así se hizo)

Asignaturas

Compiladores/Procesadores de Lenguajes

TALF/CyC

Programación en C

Metodología de la programación

Investigación

DELi

LinguaMedia

MoreLab (en DeustoTech)

Linked Data Spain

TIMM

Red Española de e-Ciencia

SEPLN

JENUI 2006

AENUI

EAPLS

EPI (Euskarazko Programazio Ingurunea)

Otros mundos

Fotos

Música

Otros mundos más lejanos

RDF Resource Description Framework Icon (for humans)

icono de twitter icono de flickr

Sección Sindical de CCOO de la Universidad de Deusto (UD Bilbao)

Campañas

Plataforma Víctimas ALVIA 04155

stopsoftwarepatents.eu petition banner

Plataforma cidadá Nunca Máis

 

[2002-11-16]

Introducción

Las herramientas más conocidas son lex y yacc. Las referencias originales (más que nada para dar crédito a los primeros que pensaron en todo esto) son:

El mejor libro que puedo recomendar específicamente sobre estos dos programas (aunque verás que la documentación de las implementaciones es muy completa) es:

Hay diversas implementaciones, por lo menos para los lenguajes C, Pascal y Java, que se explican en los apartados a continuación. Por nuestro lado, hace años desarrollamos un proyecto de esta misma clase, aunque ahora está más bien abandonado: se llamaba GeLLCo.

[2004-11-12][2002-11-15][1998-12-01]

flex + bison (lenguaje C)

flex y bison son las herramientas desarrolladas en el proyecto GNU (Free Software Foundation) equivalentes a lex y yacc en el sistema operativo UNIX®. Están asociadas al lenguaje C, aunque flex puede también generar su salida en el lenguaje C++. Las referencias que creo oficiales (al menos en cuanto a documentación) son las siguientes (aunque también podrás conseguir estos documentos a través de los enlaces que aparecen posteriormente):

Si usas GNU/Linux, es casi seguro que ya tengas instalados estos programas; si no los tienes, búscalos en tu distribución, porque están seguro. Para usarlos, solo tienes que leer la documentación, y listo.

Si no usas GNU/Linux, probablemente tampoco sepas lo que es GNU. Vas a tener que trabajar un poco más, pero leyendo todo lo que sigue podrás conseguirlo (espero).

GNU: condiciones de uso

GNU es software libre: no significa que sea gratis o no (normalmente sí), sino que eres libre para usarlo, modificarlo y distribuirlo, pero bajo ciertas normas, que en este caso, están recogidas básicamente en la GNU General Public License, que te ruego que leas atentamente si no la conoces. Si no has tenido contacto con el proyecto GNU, te recomiendo que investigues a través de los enlaces anteriores las ideas en que se basa dicho proyecto, antes de utilizar las herramientas de generación de compiladores (o cualesquiera otros programas desarrollados en GNU).

Distribución para MS-Windows®: cómo pillarla

DJ Delorie prepara desde hace tiempo algunos de los programas de GNU para el sistema operativo MS-DOS® y derivados (es decir, MS-Windows®), dentro del proyecto más ambicioso de crear un sistema de desarrollo completo de 32-bits (DJGPP) para dicho sistema operativo. También en este caso es preciso que estés atento a las condiciones de uso de tales programas.

Para conseguir las herramientas comentadas, después de leer lo que haya en los sitios anteriores, lo mejor es acudir a un mirror, y uno de los mejores es el de RedIRIS, en Madrid. La parte de GNU está en ftp://ftp.rediris.es/mirror/GNU/ en código fuente, por lo que no es posible prepararlo para MS-DOS®. Ese problema es el que ha resuelto DJ Delorie, por lo que estamos profundamente agradecidos. El sistema DJGPP se encuentra en ftp://ftp.rediris.es/mirror/djgpp/ y la última versión en ftp://ftp.rediris.es/mirror/djgpp/current/.

Aunque estrictamente deberías recoger todos los archivos de la distribución, lo cierto es que en DJGPP puedes seleccionar los módulos individuales que realmente te interesan. Es importante entender que además de ejecutables ya compilados y otros archivos afines (como librerías, cabeceras, etc.) dispones en muchos casos de la documentación, y en todo momento del código fuente correspondiente, lo cual es el concepto crucial del software libre. Un módulo típico del sistema DJGPP contiene tres archivos:

A veces, por diversas razones, puede faltar alguno de estos módulos.

[2004-11-12]

Distribución mínima que recomiendo

Considero que la distribución mínima para ejecutar flex y bison está formada por los módulos que se relacionan a continuación. Indico el tamaño en bytes (algunos módulos son bastante grandes, como ves). Presta atención también a las versiones, con el paso del tiempo pueden aparecer nuevas, mira la fecha en que redacté este apartado.

Instalación

Para poner en marcha el sistema, descomprime los archivos anteriores en un directorio creado al efecto (que se suele llamar c:\djgpp), sin olvidar (importantísimo) que hay que mantener la estructura de directorios original. En ese directorio raíz creado para el sistema completo ha de encontrarse el archivo djgpp.env. Entonces hay que definir una variable de entorno llamada DJGPP con el siguiente valor:

c:\djgpp\djgpp.env

(si la raíz del sistema es c:\djgpp). Por comodidad, también se suele añadir a la variable de entorno PATH el directorio donde quedan los ejecutables, que será c:\djgpp\bin con la suposición anterior.

Uso

Aparte de lo anterior, no hay que hacer nada especial (si usas MS-Windows®) para ejecutar estos programas: eso sí, has de hacerlo desde la ventana de MS-DOS®, porque son programas de línea de comando.

flex y bison generan código C, que en principio puede procesarse con cualquier compilador de este lenguaje, pero ya se sabe que esto no siempre es tan sencillo. El corazón de DJGPP es el mismo que el del proyecto GNU: Gcc, el compilador/sistema de desarrollo de C (con soporte para otros lenguajes), que acepta sin duda el código generado por esas herramientas. Pueden intentarse otras implementaciones por todos conocidas; no tendrán dificultades mientras se adhieran al lenguaje C estándar.

Documentación

Insisto en la conveniencia de trabajar con las versiones telaraña de la misma, incluidas en los archivos comprimidos reseñados antes, y que se sitúan en el directorio c:\djgpp\gnudocs al desempaquetar los mismos. La misma documentación se encuentra en formatos TEX, DVI y PostScript, por lo que es posible obtener con relativa facilidad copias impresas (pero, ya sabes, cada vez hay menos árboles, así que tú mismo).

[2002-11-16]

TP lex&yacc (lenguaje Pascal)

Estas son versiones de las mismas herramientas anteriores, pero escritas en, y generando como salida, el lenguaje Pascal. Han sido desarrolladas principalmente por Albert Gräf, profesor en una universidad alemana. Sus programas se distribuyen bajo la GNU General Public License, y puedes encontrarlos en la página principal del proyecto.

La versión actual es la 4.1a. En principio, funcionan con Turbo Pascal y compatibles, pero parece que también admite versiones más modernas como Borland Delphi, y la versión libre de Turbo Pascal llamada Free Pascal Compiler.

Instalación, uso, documentación

Viene bien explicado en las instrucciones, pero doy pequeñas indicaciones. Tendrás que compilar los programas fuente que se proporcionan en la distribución: para ello, hay unos programas de órdenes (make????.bat), de los cuales habrá que elegir el adecuado según el compilador de Pascal que tengas. Entonces, habrá que decidir donde van los siguientes archivos:

Lo que te recomiendo es que los dejes en un directorio específico (el propio usado para compilar, por ejemplo), y hagas dos cosas: una, añadir ese directorio a la variable de entorno PATH, y dos, configurar tu compilador de Pascal para que busque unidades (units) también en ese directorio.

Para usar los ejecutables, lo mismo que en el caso anterior, ventana de MS-DOS® al canto. Se proporciona un manual de usuario, muy completo. ¡Bien por el software libre!

[2002-11-16]

JLex + CUP (lenguaje Java)

Varias personas han desarrollado herramientas similares para el lenguaje Java. Se pueden encontrar (doy más datos luego) a través del sitio oficial del libro:

Por cierto, se trata de un libro de compiladores muy recomendable, y hay otras dos versiones en que solo cambia el lenguaje (C o ML).

El programa JLex ha sido desarrollado por Elliot Joel Berk y C. Scott Ananian, y la última versión es la 1.25, de septiembre de 2000. La página principal anterior permite obtener el programa (en forma de fuente Java) y el manual de usuario, y contiene también instrucciones de instalación y una lista de errores conocidos. Observa atentamente las condiciones de uso, modificación y distribución. En cuanto a sus características, JLex es muy similar a flex, aunque probablemente no estén implementadas todas las funcionalidades de este último, y se han introducido ligeras modificaciones en algunos aspectos. Pero, vamos, conociendo flex o lex, esta versión en Java no cuesta nada de aprender.

El programa CUP ha sido desarrollado por Scott Hudson, Frank Flannery y C. Scott Ananian, siendo 0.10k su versión más reciente (julio 1999). Como en el caso anterior, desde la página anterior hay acceso al código fuente, al manual, condiciones de uso, etc. En lo que se refiere a la relación con yacc o bison, aquí hay diferencias más significativas. Aunque los conceptos son similares, la sintaxis y otros detalles se alejan, a veces notablemente, de lo que encontramos en las herramientas originales, pero no es muy difícil comprenderlos.

Sin nada que ver con el tema (en principio), acabo de percatarme (estas sorpresas son las que me gustan de Internet) que el tal C. Scott Ananian tiene un pedazo de weblog bastante impresionante, por su contenido crítico quiero decir, al menos en lo poco que me ha dado tiempo a leer... y además parece ser un gran defensor del software libre en general, y de Linux en particular. Recomendable la visita.

[2002-11-16]

Otras herramientas y enlaces

Hay una herramienta en particular que llevo muchos años queriendo conocer, a la que dedico el primer subapartado. Después recojo algunos enlaces que he ido recopilando.

ANTLR

Terence J. Parr lleva años, pero años, desarrollando una herramienta que, inicialmente se llamaba PCCTS, pero que ahora se ha modernizado en la denominación ANTLR, que no sé qué significa, pero "anti-LR" puede ser una opción. Efectivamente, así como yacc y sus derivados (explicados en los apartados anteriores) generan un analizador sintáctico ascendente (tipo LR, técnicamente), ANTLR y su predecesor se basan en el análisis sintáctico descendente, y ello tiene un gran mérito, porque tradicionalmente se había considerado su inferioridad respecto a la técnica ascendente. Parr ha desarrollado una serie de nociones que me parecen de gran importancia (principalmente el análisis sintáctico basado en predicados y la integración léxico-sintáctico-semántica en una única especificación), en las cuales querría profundizar algún día.

Total, desde la página principal de ANTLR puedes descargar, entre otras cosas, el programa y la documentación: esta vez, es software de código abierto (open source, que es ligeramente distinto a software libre, según se explica en la página filosófica de la FSF), aunque solicita que te registres en su sitio. ANTLR está escrito en Java, pero puede generar código tanto para este lenguaje como para C++ y otro llamado Sather (¿¡!?). Si quieres usar la versión previa (que genera solamente C++), este es el sitio de PCCTS.

Enlaces varios

Te aviso que no los he revisado, puede que estén obsoletos (y algunos serán más viejos que la carracuca).

[1997]

GeLLCo

Nota importante [2002-11-15]: el sistema GeLLCo no ha continuado su desarrollo, por lo que lo siguiente tiene un interés puramente histórico.

El sistema GeLLCo (el generador de compiladores LL que integra la especificación léxica y sintáctica) está listo (desde noviembre de 1996) para una primera distribución, en su versión 1.1, aunque todavía falta un montón de trabajo. Esta versión fue realizada por José Pérez Ius y Lorenzo del Río, bajo la dirección de Andoni Eguíluz y JosuKa Díaz.

Se proporcionan ejecutables y librerías para el sistema operativo MS-DOS®. Pulsa debajo si quieres obtener una copia autoextraíble (formato ZIP) del mismo:

GeLLCo 1.1

Son 520 Kb de nada, pero al descomprimirse ocupará 2'25 Mb. (Por cierto, la compresión se ha realizado gracias a las magníficas utilidades de Info-Zip.)

Para extraer los programas, crea un directorio donde quieres que resida GeLLCo, y ejecuta ahí el archivo autoextraíble (si no te gustan los ejecutables de "otros", lo cual comprendo, ningún problema: extrae el archivo con cualquier utilidad que reconozca el formato ZIP, pero no olvides activar la reconstrucción de directorios).

Puedes leer las instrucciones ahora (leemegel.txt) o después de extraerlo (van también en la distribución). De momento, la documentación de usuario solo se distribuye en papel.

Mi anagrama peque


Mi anagrama peque

Copyright © 1998-2002 JosuKa Díaz Labrador

Facultad de Ingeniería, Universidad de Deusto, Bilbao, España

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

Última modificación: 2002-11-16. Accesos al sitio: 477404

Valid XHTML 1.1! Valid CSS!