Intaroduccion a java
Una introducción al generador JavaCC
José Gabriel Pérez Díez Departamento L.P.S.I. Escuela Universitaria de Informática Universidad Politécnica de Madrid
Octubre 2008
1
Contenido
Principios básicos del generador JavaCC
Descripción inicial Obtención de un analizador léxico-sintáctico Ejemplo de presentación Analizadores generados
2 2 2 2 4 5 5 6 710 14 15 15 17 20 23 24 25 26 29 33 34
Forma de una especificación JavaCC
Sección de opciones Sección de ejecución Sección de sintaxis Sección de lexicografía
Tareas asociadas a la estructura sintáctica
Bloque para un símbolo Acciones sintácticas Valor comunicado por un método
Comunicación entre los analizadores léxico y sintáctico Tareas asociadas a las piezas sintácticas
Acciónligada a una pieza sintáctica Bloque de declaraciones lexicográficas Declaraciones lexicográficas predefinidas Acción lexicográfica común
A modo de recapitulación Precisiones sobre el analizador sintáctico generado
2
□
◊
Principios básicos del generador JavaCC
Descripción inicial El generador JavaCC (Java Compiler Compiler) es una herramienta para generar programas escritos en lenguajeJava; 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ónléxico-sintáctica con la inclusión adecuada de código para que el programa generado llegue a ser un analizador completo del lenguaje.
◊
Obtención de un analizador léxico-sintáctico
•
Pasos para la generación del analizador
1.- Edición de la especificación (editor de texto plano) vi | edit |· · · NombreFichero.jj (el nombre del fichero puede tener cualquier extensión; suele usarse .jj) 2.-Ejecución del generador javacc NombreFichero.jj Si el nombre elegido para la especificación es NombreDeLaEspecif (más adelante se indica la manera de dar un nombre a la especificación), como resultado de la generación se obtiene (además de otros ficheros auxiliares) el fichero NombreDeLaEspecif.java 3.- Compilación del analizador generado javac NombreDeLaEspecif.java Como resultado de la compilaciónse 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 presentarsepor pantalla, queden grabados en un fichero de nombre Salida.dat java NombreDeLaEspecif < Programa.len > Salida.dat
◊
Ejemplo de presentación
•
Descripción del lenguaje
El lenguaje L está formado por las expresiones en las que pueden aparecer: - variables - constantes - operadores + y * Las variables son nombres formados por una única letra (minúscula o mayúscula); las constantes sonnúmeros enteros de una o más cifras. El espacio y el tabulador pueden estar presentes, pero no tienen ningún
3 significado; los finales de línea tampoco son significativos (una expresión puede codificarse ocupando una o más líneas). La sintaxis de las expresiones se especifica mediante la siguiente gramática: ::= ::=
{
+
}
{
*
}
::= variable | constante | ( )
•Especificación léxico-sintáctica codificada con la notación JavaCC
Una manera de escribir la especificación (para la que se ha elegido el nombre ExprMin) de forma que sea aceptada por el generador es: options { Ignore_Case = true; }
PARSER_BEGIN (ExprMin) public class ExprMin { public static void main (String[] argum) throws ParseException { ExprMin anLexSint = new ExprMin (System.in);...
Regístrate para leer el documento completo.