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éxico-sintá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.

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ó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 <>

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 <> Salida.dat


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);

anLexSint.unaExpresion();

System.out.println(“Análisis terminado:”);

System.out.println

(“no se han hallado errores léxico-sintácticos”);

}

}

PARSER_END (ExprMin)

void unaExpresion() :

{ }

{

expresion()

}

void expresion() :

{ }

{

termino() ( “+” termino() )*

}

void termino() :

{ }

{

factor() ( “*” factor() )*

}

void factor() :

{ }

{

 

|

| “(” expresion() “)”

}

TOKEN:

{

< variable : [“a”-“z”] >

}

TOKEN:

{

< constante : ( [“0”-“9”] ) + >

}

SKIP:

{ ” ” | “\t” | “\n” | “\r” }

Obtención del analizador

Si la especificación precedente se tiene grabada en un fichero de nombreEjemplo.jj, para obtener el analizador:

– se ejecuta el generador: javacc Ejemplo.jj

– se compila el analizador generado: javac ExprMin.java

Ejecución del analizador

Si se quiere analizar una expresión grabada en un fichero de nombrePruebaExp.txt:

– se ejecuta el analizador obtenido: java ExprMin <>

Webgrafía:

Anuncios

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: