Compilador

Compilador
Información sobre la plantilla
Esquema de C.JPG
Concepto:Programa informático cuya función es transformar código fuente legible para el humano a código de máquina que una CPU puede ejecutar.

Compilador. Un compilador es un traductor que trasforma textos fuentes de lenguaje de alto nivel a lenguajes de bajo nivel. Un compilador típicamente opera en fases, cada una lleva a cabo una tarea sobre el programa fuente.

Características principales de un compilador

Para cada lenguaje de programación se requiere un compilador separado.

  • El compilador traduce todo el programa antes de ejecutarlo.
  • Los programas compilados se ejecutan más rápido que los interpretados, debido a que han sido completamente traducidos a lenguaje máquina.
  • Informa al usuario de la presencia de errores en el programa fuente.
  • Poseen un editor integrado con un sistema de coloreado para los comandos, funciones, variables y demás partes de un programa.

Herramientas para generar compiladores

Herramientas tradicionales

Ventajas

  • Generan analizadores eficientes, incluso más que los que se pudiera hacer de manera manual.
  • Los analizadores ascendentes reconocen la mayor parte de los lenguajes

Desventajas

  • Yacc usa herramientas externas para que le provean los tokens necesarios
  • Las acciones semánticas asociadas con las producciones de los no terminales de las gramáticas son difíciles de depurar
  • Yacc no genera árboles de análisis sintáctico
  • Mezcla las especificaciones sintácticas con las semánticas
  • Incrementos en la dificultad del trabajo de depuración de puesto que los errores que cometen el fichero de especificación con solo visibles en el analizador generado.

Herramientas de nueva generación

ANTLR

  • Se considera el lex/yacc del nuevo milenio.
  • Genera árboles sintácticos descendentes.
  • Escrito íntegramente en JAVA.
  • Genera código en JAVA o C++.

Ventajas

  • Buena integración de los analizadores léxicos y sintácticos
  • El código generado por ANTLR es más fácil de entender y depurar que el YACC.
  • Las especificaciones gramaticales de ANTLR permiten la notación BNF y generan árboles de análisis sintáctico.

Desventajas

  • Genera analizadores menos eficientes que los generados por YACC.
  • Los ficheros de especificación de ANTLR son muy complejas.
  • El proceso de depurado consta de las siguientes fases:
  1. Escribir el código de acciones.
  2. Compilar el fichero de especificaciones
  3. Compilar y ejecutar el programa generado
  4. Localizar errores del programa
  5. Corregir errores en el fichero de especificaciones

JAVACC

  • Inicialmente se llamo JACK.
  • Similar al ANTLR.
  • Analizador ascendente.

Ventajas

  • Buena integración y los analizadores léxicos y sintáctico.
  • Genera analizadores sintácticos descendentes basados en la gramática.
  • Incluye la herramienta JJTREE para generar árboles sintácticos.

Desventajas

  • Las mismas que ANTLR

Otras herramientas

BYACC/JAVA

  • Extensión de YACC para generar código JAVA en vez de C/C++.
  • Fichero de especificaciones igual que YACC
  • Código y declaraciones de lenguaje escritos en JAVA.

COCO/JAVA

  • Generados de compiladores que a partir de la descripción del lenguaje mediante una gramática LL genera un analizador sintáctico y un analizador léxico para dicho lenguaje.

CUP

  • Versión LEX/YACC para JAVA (su forma de trabajo es análoga).

JACCIE

  • JAVA BASED COMPILER.-Compiler in an Interactive Environment.
  • Herramienta educativa que se puede utilizar para visualizar las técnicas de compilación.
  • Dos principales componentes: un generador de analizadores léxicos y una variedad de generadores de generadores sintácticos.

JELL

  • Es un generador de analizadores sintácticos que genera analizadores descendentes a partir de gramáticas LL.

Kits para la construcción de compiladores

COKTAIL

Conjunto de herramientas para construir compiladores

  • REXàgenerador de analizadores léxicos.
  • LALRàgenerador de analizadores sintácticos.
  • ELLàgenerador de analizadores sintácticos.
  • ASTàgenerador de árboles sintácticos.
  • AGàpermite procesar gramáticas atribuidas.

ELI

  • Combina una variedad de herramientas estándar para implementar potentes estrategias en la construcción de compiladores.
  • Se pueden generar automáticamente implementaciones de lenguajes completos a partir de las especificaciones de la aplicación.
  • Contiene librerías de especificaciones reusable.

PCCT

  • Escrito inicialmente en C++ para generar compiladores en C++.
  • Portado a JAVA y llamado ANTLR.XX
  • Consta de 3 herramientas:
  1. ANTLRàgenerador de analizadores de sintácticos
  2. DLGàgenerador de analizadores léxicos
  3. SORCERERàgenerador de árboles sintácticos

Fuente