Está en la página 1de 19

JLex y Cup

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/

Manual de Instalacion : JLex y Cup Page 2

Requisitos minimos : Java

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

Manual de Instalacion : JLex y Cup Page 3

Instalando Jlex (1)

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/

Manual de Instalacion : JLex y Cup Page 4

Manual de Instalacion : JLex y Cup Page 5

Instalando Jlex (2)

Dentro de la carpe Jlex, se debe compilar el fichero Java con el siguiente comando:
javac Main.java

Manual de Instalacion : JLex y Cup Page 6

Manual de Instalacion : JLex y Cup Page 7

As queda el directorio Jlex, despus de la compilacin.

Instalando Jlex (3)

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.

Manual de Instalacion : JLex y Cup Page 8

Qu es Cup?

CUP es la herramienta que usaremos para generar el analizador sintctico de nuestro lenguaje.

Manual de Instalacion : JLex y Cup Page 9

Instalando Cup (1)

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.

Manual de Instalacion : JLex y Cup Page 10

Descomprimir

Manual de Instalacion : JLex y Cup Page 11

Instalando Cup (2)

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

USANDO Jlex y Cup por primera vez: Una calculadora sencilla

Manual de Instalacion : JLex y Cup Page 13

Usando JLex y Cup : Expresiones Aritmticas (1)

Crearemos un carpeta para nuestro proyecto (en esta caso la llamaremos EJEMPLO en la cual crearemos los archivos .lex y .cup

Manual de Instalacion : JLex y Cup Page 14

Usando JLex y Cup : Expresiones Aritmticas (1)


Archivo analex.jlex
import java_cup.runtime.Symbol; %% %cup %% ";" { //RECONOCE EL SIMBOLO PUNTO Y COMA return new Symbol(sym.SEMI); } "+" { System.out.print("SIGNO DE SUMA ");//RECONOCE EL SIMBOLO MAS return new Symbol(sym.PLUS); } "*" { System.out.print("SIGNO POR ");//RECONOCE EL SIMBOLO POR return new Symbol(sym.TIMES); } "-" { System.out.print("SIGNO MENOS ");//RECONOCE EL SIMBOLO MENOS return new Symbol(sym.MENOS); } "/" { System.out.print("SIGNO DIVIDIDO ");//RECONOCE EL SIMBOLO DIVIDIDO return new Symbol(sym.DIVI); } "(" { return new Symbol(sym.LPAREN); } //RECONOCE EL PARENTESIS DE APERTURA ")" { return new Symbol(sym.RPAREN); }//RECONOCE EL SIMBOLO PARENTESIS DE CIERRE [0-9]+ { System.out.print(" numero ");//RECONOCE LOS NUMEROS return new Symbol(sym.NUMBER, new Integer(yytext())); } [ \t\r\n\f] { /* ignore white space. */ } . { System.err.println("Illegal character: "+yytext()); }

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; :} ;

Manual de Instalacion : JLex y Cup Page 15

Usando JLex y Cup : Expresiones Aritmticas (2)


El archivo analex.jlex
El import java_cup.runtime.Symbol se utiliza para importar los smbolos que se declararn en CUP, por tanto, cuando compilemos este archivo debemos tener el archivo de CUP ya creado tambin. Los signos como punto y coma, mas, menos, por, dividido, parntesis;son los signos que la gramtica reconocer; el System.out.print lo escribimos para quecuando los encuentre nos muestre en la consola la palabra que tenemos escrita entrecomillas, como en el caso de suma nos desplegar en pantalla "SIGNO DE SUMA", y el nombre con el que lo guardar es con PLUS, que es para lo que se utiliza la instruccin return new symbol(sym.PLUS); es decir, esta instruccin agrega a la tabla de smbolos el signo mas con el nombre de PLUS, en el caso de los nmeros podemos observar que tenemos la siguiente instruccin return new Symbol(sym.NUMBER, new Integer(yytext())); que nos permitir utilizar los nmeros como texto, no solo como smbolos, por esto podemos utilizar ciertos atributos que nos permitirn manipularlos de cierta manera. El cdigo [\t\r\n\f] { /* ignore white space. */ } lo utilizamos para que ignore espacios en blanco, cambios de lnea, tabulaciones, etc. . { System.err.println("Illegal character: "+yytext()); } este cdigo lo utilizamos en el caso que no encuentre el carcter que le decimos como cadena de entrada nos indique que hay un error, y pueda continuar con el anlisis recuperando errores.

Manual de Instalacion : JLex y Cup Page 16

Usando JLex y Cup : Expresiones Aritmticas (3)


El archivo parser.cup

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.

Manual de Instalacion : JLex y Cup Page 17

Usando JLex y Cup : Expresiones Aritmticas (4)

Ahora compilemos con los comandos: java JLex.Main analex.lex java java_cup.Main parser.cup

Manual de Instalacion : JLex y Cup Page 18

Usando JLex y Cup : Expresiones Aritmticas (5)

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:

Manual de Instalacion : JLex y Cup Page 19

También podría gustarte