Herramientas tradicionales
- Lex/Yacc
- Pclex
- Pcyacc
- Bison
- Flex
Ventajas:
- Generan analizadores eficientes, incluso más que los que pudiéramos 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 mas 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 reusables.
PCCT
- Escrito inicialmente en C++ para generar compiladores en C++.
- Portado a JAVA y llamado ANTLR.XX
- Consta de 3 herramientas:
· ANTLRàgenerador de analizadores de sintácticos
· DLGàgenerador de analizadores léxicos
· SORCERERàgenerador de árboles sintácticos
HERRAMIENTAS PARA GENERAR COMPILADORES
HERRAMIENTAS PARA GENERAR COMPILADORES
Herramientas tradicionales
- Lex/Yacc
- Pclex
- Pcyacc
- Bison
- Flex
Ventajas:
- Generan analizadores eficientes, incluso más que los que pudiéramos 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 mas 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 reusables.
PCCT
- Escrito inicialmente en C++ para generar compiladores en C++.
- Portado a JAVA y llamado ANTLR.XX
- Consta de 3 herramientas:
· ANTLRàgenerador de analizadores de sintácticos
· DLGàgenerador de analizadores léxicos
· SORCERERàgenerador de árboles sintácticos