Herramientas para el diseño de compiladores

Resumen

A partir de los años 50 es necesario un compilador derivado de los lenguajes de alto nivel. Desde entonces, gracias al descubrimiento de técnicas sistemáticas para el manejo de muchas tareas, al desarrollo de buenos lenguajes de implantación, entornos de programación y herramientas de software, el diseño y desarrollo de un compilador se ha simplificado enormemente.

Palabras clave: Compilador, herramientas.

Abstract

From the 50s is necessary a compiler derived from high level languages. Since then, thanks to the discovery of systematic techniques for handling many tasks, the development of good implementation languages, programming environments and software tools, the design and development of a compiler has been significantly simplified.

Keywords: Compiler, tools.

Introducción

La totalidad del software que se ejecuta en las computadoras ha sido escrito en algún lenguaje de programación. Antes de que un programa sea ejecutado en determinada arquitectura hardware, primero es necesario hacer la traducción de este a un programa ejecutable, por lo cual es necesario un compilador. Al día de hoy, son ya distintos los lenguajes de programación utilizados para el desarrollo de software o programas, con la evolución de estos lenguajes ha sido necesaria la implementación de diversos compiladores. Para las diversas fases del proceso de compilación es necesaria una herramienta para lograr la creación del programa objeto o ejecutable. En el presente trabajo se presentan algunas de las herramientas alternativas para el desarrollo de compiladores. Posterior a esta sección se presenta un breve resumen, a continuación se fija el objetivo particular de este trabajo, posteriormente se hace una definición del compilador, y para finalizar se presentan algunas herramientas para el desarrollo de compiladores de acuerdo a las fases de este.

Objetivo

Conocer herramientas utilizadas para la construcción de compiladores.

Definición de compilador

Un compilador, es un programa que recibe como entrada un programa o archivo fuente, lo traduce y obtiene como salida un programa objeto, dentro del proceso de compilación se le dan a conocer al usuario los errores del programa fuente si la sintaxis del mismo no es la correcta de acuerdo al lenguaje de programación.



Figura 1. Proceso de compilación.

Herramientas para el desarrollo de compiladores

En la actualidad existen diversas herramientas para el desarrollo de compiladores, en el presente trabajo se mencionan sólo algunos de los existentes. Dentro de estas herramientas se encuentran las tradicionales y las de nueva generación.
Las herramientas tradicionales:

  • Goldparser
  • Yacc
  • Cup

Las herramientas de nueva generación:

  • ANTLR
  • JAVACC

A continuación se mencionan herramientas definiendo algunas de sus características y mencionando en que fase se utiliza.

  • GOLDPARSER.- Su funcionamiento es realizar el análisis léxico emplea autómatas finitos determinísticos y anticipado analizador, estos algoritmos son máquinas de estado que emplean tablas para determinar acciones. Esta herramienta está compuesta de tres componentes lógicos:
    • Constructor: Componente primario y el principal de la aplicación, se emplea para analizar la sintaxis de un lenguaje y la construcción de tablas.
    • Motor: Esta escrito para un lenguaje de programación especifico.
    • Cuadro compilado gramática: Almacena datos de la tabla creada en el constructor.
  • YACC.- herramienta de software libre que genera un analizador sintáctico en cual se basa en una gramática analítica cuya escritura se parece a una gramática libre. Está compuesta de tres secciones:
    • Definiciones: Su función principal es declarar símbolos terminales de la gramática.
    • Reglas: Contiene a la gramática en sí, esta sección es la única obligatoria y no puede estar vacía.
    • Rutas: Esta se encarga de definir funciones.
  • CUP.- herramienta para la construcción de analizador sintáctico el cual recibe un archivo de entrada y la salida genera parsers escritos en java, los parsers que se obtienen utilizan el método de análisis descendente LALR. La estructura del archivo de entrada es la siguiente:
    • Especificaciones de importación y empaquetamiento.
    • Código de usuario.
    • Lista de símbolos.
    • Declaraciones de precedencia.
    • Gramática.
  • ANTLR.- genera árboles sintácticos descendientes, escrito en java y genera código en java o c++.
    • Ventajas. Buena integración de los analizadores léxicos y sintácticos.
    • Desventaja. Genera analizadores menos eficientes que los generadores YACC.
  • JAVACC.- inicialmente se llamó JACK es similar al ANTLR y genera árboles ascendentes.
    • Ventaja. Buena integración en los analizadores léxicos y sintácticos. Genera analizadores sintácticos y por lo siguiente árboles sintácticos.
    • Desventaja. Analizadores menos eficientes.

Conclusión

En este trabajo se conocieron brevemente algunas de las diferentes herramientas que existen para desarrollar compiladores, así como algunas de sus características, ventajas y desventajas de las mismas.
En un trabajo futuro se profundizará sobre la herramienta Yacc, sus características y la aplicación de esta herramienta en el desarrollo de un compilador básico

Referencias

1. Compiladores, principios, técnicas y herramientas; segunda edición; Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Ed. Pearson

2. Yacc: Yet Another Cso Compressor; http://yacc.pspgen.com/

3. Gold Parsing System;http://goldparser.org/

4. CUP;http://www.cs.princeton.edu/~appel/modern/java/CUP/manual.html

5. ANTLR: ANother Tool for Language Recognition;http://www.antlr.org/

6. JAVACC: Java Compiler Compiler; http://javacc.java.net/

[a] Profesor Investigador, Escuela Superior de Huejutla de la Universidad Autónoma del Estado de Hidalgo. <<

[b] Alumno, Escuela Superior de Huejutla de la Universidad Autónoma del Estado de Hidalgo. <<