Compilación y Ejecución

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.

Anuncio publicitario

4 comentarios to “Compilación y Ejecución”

  1. «»StringReader»»… justo lo q necesito, ya que de un text area obtengo la info=).. se te agradece.

  2. Estoy haciendo un compilador muy sencillo con JCup deseo mostrar una especie de arbol sintactico… me podrias ayudar con eso¿’? gracias

    • No se si tenes experiencia con crear el árbol de forma abstracta? en la gramática, para formar un nodo cada vez que reduce con la información necesaria, Hecho esto cada vez que reduzca en las acciones de la gramática podrías crear nodos con graphviz, es muy sencillo y útil para hacer grafos

  3. Una consulta, que pasa, si nosotros tenemos implementado nuestro propio parser.. y nos devuelve la tira de tokens… Podemos incorporarlo con CUP?

Deja una respuesta

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. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: