Está en la página 1de 5

GENERADOR JAVACC

1. DEFINICION: El generador JavaCC (Java Compiler Compiler) es una herramienta para generar programas escritos en lenguaje Java; acepta como entrada una especificacin de un determinado lenguaje y produce como salida un analizador para ese lenguaje. En la manera ms simple de funcionamiento, la especificacin proporcionada define las caractersticas sintcticas y lexicogrficas de un lenguaje y se genera un analizador lxico-sintctico del lenguaje especificado; pero tambin es posible completar una especificacin lxico-sintctica con la inclusin adecuada de cdigo para que el programa generado llegue a ser un analizador completo del lenguaje.

2. CARACTERISTICAS:

Anlisis descendente, permitiendo el uso de gramticas mas generales y la posibilidad de poder utilizar atributos en el rbol sintctico durante el parsing. Especificaciones lxicas y gramaticales en un solo archivo. De esta manera la gramtica puede ser leda y mantenida ms fcilmente gracias al uso de las expresiones regulares dentro de la gramtica. Permite extender especificaciones BNF mediante la utilizacin de expresiones regulares, tales como (A)*, (A)+. Ofrece estados lxicos y la capacidad de agregar acciones lxicas incluyendo un bloque de cdigo java tras el identificador de un token. Adems de los conceptos de token, more, skip, cambio de estados, etc. Ello permite trabajar con especificaciones ms claras, a la vez que permite un mejor manejo de mensajes de error y advertencias de JavaCC. Genera por defecto un parser LL(1). sin embargo, puede haber porciones de la gramtica que no son LL(1). JavaCC ofrece la posibilidad de

resolver las ambigedades shift-shift localmente al punto del conflicto. En otras palabras, permite que el parser se vuelva LL(k) slo en tales puntos; pero se conserva LL(1) en el resto de las producciones para obtener una mejor actuacin. Permite el uso de Tokens Especiales que son ignorados por el parser; pero estn disponibles para poder ser procesados por el desarrollador. Las especificaciones lxicas pueden definir tokens de manera tal que a nivel global no se diferencien las maysculas de las minsculas en la especificacin lxica completa o en una especificacin lxica individual El anlisis del parsing y los pasos de procesamiento de tokens pueden realizarse en profundidad por medio de la utilizacin de las opciones DEBUG_PARSER, DEBUG_LOOKAHEAD, y DEBUG_TOKEN_MANAGER,. JavaCC incluye JJTree, un preprocesador para el desarrollo de rboles, con caractersticas muy poderosas. De entre los generadores de parsers, JavaCC se halla entre los que tienen mejor manejo de errores. Los parsers generados por JavaCC son capaces de localizar exactamente la ubicacin de los errores, proporcionando informacin diagnstica completa. JavaCC incluye una herramienta llamada JJDoc que convierte los archivos de la gramtica en archivos de documentacin. El analizador lxico de JavaCC puede manejar entradas Unicode, y las especificaciones lxicas tambin pueden incluir cualquier caracter Unicode. Esto facilita la descripcin de los elementos del lenguaje, tales como los identificadores Java que permiten ciertos caracteres Unicode que no son ASCII, pero no otros. JavaCC es quiz el generador de parsers usado con aplicaciones Java ms popular. JavaCC ofrece muchas opciones diferentes para personalizar su comportamiento y el comportamiento de los parsers generados.

3. ESTRUCTURA GENERAL DE UN PROGRAMA JAVACC Cualquier cdigo escrito para JavaCC obedece a la siguiente estructura:

Opciones_javacc PARSER_BEGIN (<IDENTIFICADOR>) Unidad de compilacin java PARSER_END (<IDENTIFICADOR>) (reglas de produccion)* <EOF>

El fichero de entrada comienza con una lista de opciones, la cual es opcional. Seguidamente nos encontramos la unidad de compilacin java la cual se encuentra encerrada entre PARSER_BEGIN(nombre) y PARSER_END(nombre). Despus nos encontramos con una lista de reglas de produccin . El nombre que sigue a PARSER_BEGIN y a PARSER_END debe ser el mismo, y ste identifica al analizador sintctico que va a ser generado con posterioridad. Por ejemplo si nuestro nombre es Gramtica, se generan los siguientes archivos:

Gramatica.java: El analizador sintctico. GramaticaTokenManager.java: gestor de tokens para el analizador lxico.

GramaticaConstants.java: El analizador lxico no maneja los tokens por el nombre que especificamos nosotros en el cdigo, sino que a cada uno de ellos le asigna un nmero. En este archivo se encuentra cada uno de los tokens junto con el nmero que le ha sido asignado por el analizador lxico.

Entre PARSER_BEGIN y PARSER_END, se encuentra una unidad de compilacin Java. sta puede ser cualquier cdigo Java siempre que contenga una declaracin de clase cuyo nombre sea el mismo que el analizador sintctico que va a ser.generado.

PARSER_BEGIN(nombre) ... class nombre. . . . . . { ... } ... PARSER_END(nombre)

La seccin options, si est presente, comienza con la palabra reservada options seguida de una lista de una o ms opciones entre llaves. La misma opcin no debe establecerse ms de una vez. Las opciones pueden ser especificadas tanto en el archivo de la gramtica como en la lnea de comandos. En caso de estar presentes en el archivo , stas deben aparecer al principio precedidas por la palabra options. Y en el caso en que se especifiquen en la lnea de comandos, stas tienen mayor prioridad que las especificadas en el cdigo.

REGLAS DE PRODUCCIN Existen cuatro tipos de reglas de produccin en JavaCC: las reglas de produccin javacode y BNF se usan para definir la gramtica a partir de la cual va a void CommonTokenAction(Token t) generarse el analizador sintctico. Las Reglas de produccin mediante expresiones regulares, se usan para definir los tokens de la gramtica el token manager es generado a partir de esta informacin-. La seccin token manager decls se usa para introducir declaraciones en el analizador sintctico que se generar con posterioridad.

LA CLASE TOKEN

La clase Token es el tipo de los objetos token que son creados por el token manager despus del escaneo exitoso de la cadena de entrada durante el anlisis lxico. Estos objetos son pasados al parser y se accede a las acciones de la gramtica JavaCC usualmente retornando el valor del token. Los mtodos getToken y getNextToken del token manager, dan acceso a los objetos de este tipo. Existen dos clases de tokens: regulares y especiales.

Los tokens regulares son los tokens normales que maneja el parser. Los tokens especiales son otros tokens muy usados que aunque no tienen relevancia sintctica no son descartados, tales como los comentarios.