Documentos de Académico
Documentos de Profesional
Documentos de Cultura
JLex y JavaCup
JLex y JavaCup
Manual de Instalacin
200512108 Fredy Josue Romero Musul USAC Facultad de Ingeniera Organizacin de lenguajes y compiladores 1 Seccin C
Qu es Jlex?
Jlex es una herramienta desarrollada en Java que usaremos para realizar el analizador lxico de nuestro compilador. http://www.cs.princeton.edu/~appel/modern/java/JLex/
Lo primero que debemos instalar es el JDK (no basta con el JRE), que es el entorno necesario para compilar y ejecutar clases Java. El SDK para J2SE (Java 2 Standard Edition) podrs descargarse de la pgina web de Sun. http://java.sun.com/j2se/1.6.9/download.html
Para empezar se debe crear un directorio nuevo (lo nombraremos jdir) que est en tu CLASSPATH (tambin puedes usar un directorio que ya exista). Sino existe en el CLASSPATH, se debe agregar. Crea un directorio llamado jdir/JLex (o jdir\JLex en Windows), y copia en el fichero Main.java que podrs descargar de la pgina web de Jlex. http://www.cs.princeton.edu/~appel/modern/java/JLex/
Dentro de la carpe Jlex, se debe compilar el fichero Java con el siguiente comando:
javac Main.java
Se habrn creado las clases Java que componen la distribucin de Jlex . Ahora ya podrs usar el Jlex mediante este comando: java Jlex.Main fichero.jlex donde fichero.jlex es el nombre del fichero con la especificacin del anlisis sintctico para tu lenguaje.
Qu es Cup?
CUP es la herramienta que usaremos para generar el analizador sintctico de nuestro lenguaje.
Descarga el cdigo fuente de CUP desde su pgina web a un directorio de tu sistema que est en el CLASSPATH. Aqu se usara la misma carperta: jdir Descomprime el paquete una vez lo hayas descargado.
Descomprimir
Ahora compilaremos el cdigo fuente de CUP. Para ello, desde el directorio donde descargamos la distribucin, ejecutaremos el siguiente comando: javac java_cup/*.java java_cup/runtime/*.java Ahora podrs ejecutar CUP mediante el siguiente comando: java java_cup.Main fichero.cup donde fichero.cup es el fichero con la especificacin del analizador sintctico de nuestro lenguaje. Y ya est hecho!!
Manual de Instalacion : JLex y Cup Page 12
Crearemos un carpeta para nuestro proyecto (en esta caso la llamaremos EJEMPLO en la cual crearemos los archivos .lex y .cup
Archivo parser.cup
import java_cup.runtime.*; action code {: /*CODIGO DE JAVA*/ :} parser code {: public static void main(String args[]) throws Exception { new parser(new Yylex(System.in)).parse(); } :} terminal SEMI, PLUS, TIMES, LPAREN, RPAREN; terminal Integer NUMBER; non terminal expr_list, expr_part; non terminal Integer expr; precedence left PLUS; precedence left TIMES; expr_list ::= expr_list expr_part | expr_part; expr_part ::= expr:e {: System.out.println(" = "+e+";"); :} SEMI; expr ::= NUMBER:n {: RESULT=n; :} | expr:l PLUS expr:r {: RESULT=new Integer(l.intValue() + r.intValue()); :} | expr:l TIMES expr:r {: RESULT=new Integer(l.intValue() * r.intValue()); :} | LPAREN expr:e RPAREN {: RESULT=e; :} ;
Primero se importa la librera runtime de la carpeta de java_cup; en esta seccin podemos colocar las libreras que necesitamos para poder compilar cdigo de java; ya que en action code, podemos escribir cdigo de java que necesitemos utilizar en nuestra acciones de la gramtica. Donde se encuentran definidos los terminales, podemos ver que son los que definimos como smbolos en el archivo de Jlex, solo el Nmero que est declarado de tipo Integer para poder utilizarlo con los atributos de un nmero. En el caso que fuera una cadena, debemos declararlo de tipo String. Los no terminales son los que utilizaremos en la gramtica. Y despus podemos declarar la precedencia si es necesario.
Ahora compilemos con los comandos: java JLex.Main analex.lex java java_cup.Main parser.cup
Los archivos generados se compilan con el comando javac -d . parser.java sym.java analex.lex.java Por medio de un archivo de texto tenemos que escribir lo siguiente java Example.parser 0<D:\\operar.txt Y s en nuestro archivo de entrada D:\\operar.txt tenemos lo siguiente 5+2*3; 5+4+3; Y la salida es: