Es la hora del paso final compilar y ejecutar nuestro scanner y parser.
Compilacion Jlex:
Para compilar el Jlex solo basta con escribir en consola:
$ jlex <archivojlex>
Y si todo se genera bien creara nuestra salida en código Java.
Compilacion Cup:
Para compilar Cup se presentan mas opciones como especificar la clase que lleva las constantes de los simbolos, el paquete de la clase, el nombre que deseamos para la salida del parser entre otras. Para nuestro ejemplo modificaremos el nombre de la clase con los simbolos y el nombre que recibira el parser:
$ cup -parser <nombredelaclasedelparser> -symbols <nombreclaseconsimbolos> <archivodenetradacup> Para ver las demas opciones: $ man cup
Código de ejecución:
Supongamos que nuestra salida de jlex tiene el nombre: scanner.java y nuestra salida de Cup Parser.java. Para poder hacer que el scanner y el parser funcionen conjuntamente las siguientes lineas de código son útiles:
En el caso que leamos un archivo de entrada:
File file=new File("url del archivo"); try{ FileReader fr=new FileReader(file); scanner lex=new scanner(fr); Parser miParser=new Parser(lex); miParser.parse(); }catch(Exception e){ System.out.println(e); } }
La clase del scanner recibe en el constructor un Stream de caracteres en este caso lo que se leyó del archivo.
scanner lex=new scanner(fr);
Y para integrarlo al parser solo debemos enviarlo al constructor del nuevo objeto parser creado
Parser miParser=new Parser(lex);
Para que nuestro objeto empiece a ejecutar el parser llamamos a su metodo parse();
miParser.parse();
Si nuestra entrada no es un archivo si no un texto leído de un TextArea o algo parecido podemos usar la clase StringReader de Java en lugar del FileReader.