UNIDAD IV.- Herramientas básicas para generar compiladores.

Para  la creación de código, es importante considerar los siguientes aspectos: la arquitectura de software para la cual se va a desarrollar el generador  de código, las características especificas del lenguaje de programación para el cual se hará el generador,  el lenguaje con el que se desarrollará el propio generador.

Afortunadamente para cada lenguaje de programación para el cual se vaya a desarrollar un compilador, existen variadas herramientas que pueden ayudar a su construcción. Estas herramientas pueden hacer muchas de las tareas que realizan los compiladores, tales como la búsqueda de patrones, la escritura de código, el análisis sintáctico, el análisis léxico y la optimización de código

4.1.- Herramientas tradicionales.

Lex/yacc: es un programa para generar analizadores léxicos,  se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico. Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el estándar de POSIX. Lex toma como entrada una especificación de analizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.

Yacc: es una herramienta general para describir la entrada a un programa de computadora. El usuario especifica las estructuras de su entrada, junto con el código que puede invocarse como cada estructura como se reconoce y yacc devuelve una subrutina que controla el proceso de entrada, con frecuencia, es conveniente y apropiado que la mayor parte del flujo de control en la aplicación del usuario al cargo de este subprograma. Fue  desarrollado por Stephen C. Johnson en para  Unix. El nombre es un acrónimo de " Sin embargo, otro compilador de compiladores . " Se genera un programa de análisis (por parte de un compilador que intenta darle sentido sintáctico del código fuente),  y genera código para  C.

Flex: herramienta que implementa un analizador léxico. Es una herramienta para generar escáneres: programas que reconocen patrones léxicos en un texto. Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadas reglas. Flex genera como salida un fichero fuente en C

Bison: herramienta que implementa un analizador sintáctico. Es un generador de analizadores sintácticos de propósito general perteneciente al proyecto GNU disponible para prácticamente todos los sistemas operativos. Bison convierte la descripción formal de un lenguaje, escrita como una gramática libre de contexto LALR, en un programa en C, C++, o Java que realiza análisis sintáctico. GNU bison tiene compatibilidad con Yacc.

PCyacc.

PClex.

4.2.-Herramientas de nueva generación.

ANTLR (ANother Tool for Language Recognition – otra herramienta para reconocimiento de lenguajes): es una herramienta creada principalmente por Terence Parr, que opera sobre lenguajes, proporcionando un marco para construir reconocedores (parsers), intérpretes, compiladores y traductores de lenguajes a partir de las descripciones gramaticales de los mismos (conteniendo acciones semánticas a realizarse en varios lenguajes de programación). ANTLR genera un programa que determina si una sentencia o palabra pertenece a dicho lenguaje (reconocedor), utilizando algoritmos LL(*) de parsing. Si a dicha gramática, se le añaden acciones escritas en un lenguaje de programación, el reconocedor se transforma en un traductor o interprete. Además, proporciona facilidades para la creación de árboles sintácticos y estructura para recorrerlos.  ANTLR es un proyecto bajo licencia BSD, viniendo con todo el código fuente disponible, y preparado para su instalación bajo plataformas Linux, Windows y Mac OS X.
Actualmente ANTLR genera código Java, C, C++, C#, Python, Perl, Delphi, Ada95, JavaScript y Objective-C.

JavaCC (Java Compiler Compiler): es un generador de analizadores sintácticos de código abierto para el lenguaje de programación Java, es similar a Yacc en que genera un parser para una gramática presentada en notación BNF, con la diferencia de que la salida es en código Java y genera analizadores descendentes. Además agrega un constructor de  árboles conocido como: JJTree, construye árboles de abajo hacia arriba.

4.3.- Otras herramientas.

BYACC/JAVA: es una  extensión de YACC para generar código JAVA en vez de C/C++, que genera ficheros de especificaciones igual que YACC y sus salidas son código y declaraciones de lenguaje escritos en JAVA.

COCO/JAVA: es una herramienta de distribución de Java para Linux, es un generador 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 o sea es un meta compilador.

CUP: versión LEX/YACC para JAVA (su forma de trabajo es análoga).

JELL: es un generador de analizadores sintácticos que genera analizadores descendentes a partir de gramáticas LL, también es un meta compilador.

4.4.- 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 reusables.

PCCT: Escrito inicialmente en C++ para generar compiladores en C++. Portado a JAVA y llamado ANTLR. Consta de 3 herramientas:

ANTLRàgenerador de analizadores de sintácticos
DLGàgenerador de analizadores léxicos
SORCERERàgenerador de árboles sintácticos

No hay comentarios:

Publicar un comentario