Documente Academic
Documente Profesional
Documente Cultură
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.
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.
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