Académique Documents
Professionnel Documents
Culture Documents
ALUMNO:
ISAAC SANCHEZ MARTINEZ
Matrcula: 14ISC035
SEMESTRE: 7 GRUPO: M2
FECHA: 21/09/17
5.1 Introduccin
JavaCC (Java Compiler Compiler - Metacompilador en Java) es el principal
metacompilador en JavaCC, tanto por sus posibilidades, como por su mbito de
difusin. Se trata de una herramienta que facilita la construccin de analizadores
lxicos y sintcticos por el mtodo de las funciones recursivas, aunque permite una
notacin relajada muy parecida a la BNF.
Al igual que con Cup, comenzaremos nuestra andadura con un ejemplo preliminar
que d idea de la estructura de un programa de entrada a JavaCC y de la notacin
utilizada para ello. Se usar el nombre JavaCC para hacer referencia tanto a la
herramienta JavaCC como al lenguaje que sta admite para describir gramticas.
As, nuestro ejemplo escrito en JavaCC es:
options {
LOOKAHEAD=1;
}
PARSER_BEGIN(Ejemplo)
public class Ejemplo{
public static void main(String args[]) throws ParseException {
Ejemplo miParser = new Ejemplo(System.in);
miParser .listaExpr();
}
}
PARSER_END(Ejemplo)
SKIP :{
"b& "
| "\t"
| "\n"
| "\r"
}
TOKEN [IGNORE_CASE] : {
<ID: (["a"-"z"])+>
| <NUM: (["0"-"9"])+>
}
void listaExpr() : {} {
( exprBasica() ";")+
}
void exprBasica() :{}{ LOOKAHEAD(2)
<ID> "(" expr() ")"
| "(" expr() ")"
| "@NEW" <ID>
| <ID> "." <ID>
}
void expr() :{}{
"@ALGO"
| <NUM>
}
Los programas JavaCC se suelen almacenar en ficheros con extensin .jj. As, el
ejemplo anterior se almacenara en el fichero Ejemplo.jj, de manera que la
metacompilacin se hace invocando al fichero por lotes javacc.bat (quien a su vez
invoca a la clase javacc.class del fichero javacc.jar) de la forma: javacc Ejemplo.jj lo
que producir los ficheros de salida:
Ejemplo.java: es el analizador sintctico.
EjemploTokenManager.java: es el analizador lexicogrfico.
EjemploConstants.java: interface que asocia un cdigo a cada token.
Asimismo, almacena en forma de String el nombre dado por el desarrollador a cada
token, con objeto de que el analizador sintctico pueda emitir mensajes de error
claros y explicativos.