JAVACC

El generador JavaCC (Java Compiler Compiler) es una  herramienta para generar programas escritos en lenguaje Java; acepta como entrada una especificación de un determinado lenguaje y produce como salida un analizador para ese lenguaje. En la manera más simple de funcionamiento, la especificación proporcionada define las características sintácticas y lexicográficas de un lenguaje y se genera un analizador léxicosintáctico del lenguaje especificado; pero también es posible completar una especificación léxico-sintáctica con la inclusión adecuada de código para que el programa generado llegue a ser un analizador completo del lenguaje..

Características principales

  • Top-Down. Recursividad descendente, capaz de pasar atributos(valores) de abajo hacia arriba.
  • Especificación lexica y gramatica en un unico fichero
  • Especificación LL(k) para resolver ambiguedades.
  • Incorpora distintos tipos de tokens: normales (TOKEN), especiales(SPECIAL_TOKEN), espaciadores (SKIP) y de continuación (MORE). Ellopermite trabajar con especificaciones más claras, a la vez que permite unamejor gestión de los mensajes de error y advertencia por parte de JavaCC entiempo de meta-compilación.
  • La especificación léxica puede definir tokens de manera tal que no sediferencien las mayúsculas de las minúsculas bien a nivel global, bien en unpatrón concreto.
  • De entre los generadores de analizadores sintácticos descendentes, JavaCC es uno de los que poseen mejor gestión de errores. Los analizadores generadospor JavaCC son capaces de localizar exactamente la ubicación de los errores,proporcionando información diagnóstica completa.
  • Permite depurar tanto el analizador sintáctico generado como el lexicográfico,mediante las opciones DEBUG_PARSER, DEBUG_LOOKAHEAD, yDEBUG_TOKEN_MANAGER.
  • Incluye la herramienta JJTree, un preprocesador para el desarrollo de árbolescon características muy potentes.

Obtención de un analizador léxico-sintáctico

  1. Edición de la especificación (editor de texto plano)
vi | edit |· · ·  NombreFichero.jj

(el nombre del fichero puede tener cualquier extensión

2.  Ejecución del generador

javacc NombreFichero.jj

Si el nombre elegido para la especificación es  NombreDeLaEspecif, como resultado de la generación se obtiene el fichero.

NombreDeLaEspecif.java

3. Compilación del analizador generado

javac NombreDeLaEspecif.java

Como resultado de la compilación se obtiene (además de otras clases auxiliares) el fichero

NombreDeLaEspecif.class

• Ejecución del analizador generado

Si el nombre del fichero donde se encuentra el texto fuente (escrito en el lenguaje para el que se ha generado el analizador) que se pretende analizar es  Programa.len

java NombreDeLaEspecif < Programa.len

Si se desea que los resultados del análisis, en vez de presentarse por pantalla, queden grabados en un fichero de nombre  Salida.dat

java NombreDeLaEspecif < Programa.len > Salida.dat

Estructura de un programa en javaCC.

La estructura básica de un programa javaCC es:

options{
area de opciones
}
PARSER_BEGIN(nombre clase)
unidad de compilación java con la clase de nombre NombreClase
PARSER_END(NombreClase)
área tokens
área de funciones BNF

El área de opciones permite especificar algunas directrices que ayuden aJavaCC a generar analizadores léxico-sintácticos bien más eficientes, bien másadaptados a las necesidades concretas del desarrollador.

Las cláusulas PARSER_BEGIN y PARSER_END sirven para indicarle a JavaCC el nombre de nuestra clase principal, así como para englobar tanto a ésta comoa cualesquiera otras que se quieran incluir de apoyo, como pueda ser por ejemplo. Un gestor de tablas de símbolos.

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: