Está en la página 1de 8

Manual de instalacin de JFlex y Cup Windows SO

Facultad de Ingeniera Escuela de Ciencias y Sistemas

Universidad de San Carlos de Guatemala

Werner Aldana Caldern Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

INSTALACIN

instalado JDK dentro de nuestra mquina.

IMPORTANTE: Para poder instalar JFlex y Cup primeramente se tiene que tener
Para efecto de este tutorial usaremos el IDE Netbeans para los archivos de configuracin. DESCARGA DE LIBRERAS
http://jflex.de/download.html.

Descargamos

las

fuentes

de

JFlex

(versin

1.4.3)

desde

la

siguiente

pgina:

Descargamos las fuentes de Cup (CUP 10k) y el ejecutable CUP 11a beta 20060608 runtime en la pgina: http://www2.cs.tum.edu/projects/cup/.

CREACIN DE CARPETA CONTENEDORA DE LAS FUENTES Creamos la carpeta Fuentes dentro de la unidad C: (Pueden escoger el lugar que ustedes prefieran, siempre tomando en cuenta dicha direccin para los siguientes pasos de la instalacin, para este manual escogimos directamente la unidad C:). Descomprimimos la carpeta de JFlex anteriormente descargada (jflex-1.4.3) dentro de la carpeta Fuentes. Descomprimimos el contenido de la carpeta Cup anteriormente descargada (CUP 10K) y copiamos la carpeta java_cup en la carpeta Fuentes.

CREACIN DE UN PROYECTO EN NETBEANS Creamos un proyecto nuevo en Netbeans. File-New Project-Java Application. En este manual llamaremos Escaner al nuevo proyecto en Netbeans. Dentro de la carpeta del proyecto creamos una carpeta lib, y colocamos el archivo java-cup11a-runtime descargado anteriormente. Dentro del rbol de carpetas del proyecto, damos click derecho en la carpeta Libraries, seguidamente seleccionamos la opcin Add JAR/Folder.

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

Despus buscamos en nuestra carpeta lib que se encuentra en la carpeta del proyecto, y seleccionamos el JAR java-cup-11a-runtime.

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

CREACIN DE ARCHIVOS jflex y cup Escaner.jflex Para crear el archivo Escaner.jflex deben agregar a su proyecto un archivo vaco.
package escaner; import java_cup.runtime.Symbol; %% numero =[0-9]+ "."? [0-9]*

%cupsym tabla_simbolos %class lexico %cup %public %unicode %line %column %char %ignorecase %% /* PALABRAS RESERVADAS */ "IF" "WHILE" "FOR" {return new Symbol(tabla_simbolos.tif, yychar,yyline); } {return new Symbol(tabla_simbolos.twhile, yychar,yyline); } {return new Symbol(tabla_simbolos.tfor, yychar,yyline); }

/* OPERADOR */ "=" "+" "-" ";" /* {return new Symbol(tabla_simbolos.tigual, yychar,yyline); } {return new Symbol(tabla_simbolos.tmas, yychar,yyline); } {return new Symbol(tabla_simbolos.tmenos, yychar,yyline); } {return new Symbol(tabla_simbolos.tpcoma, yychar,yyline); } NUMEROS */

{numero} /* BLANCOS */ [ \t\r\f\n]+

{return new Symbol(tabla_simbolos.tnumero, yychar,yyline,new String(yytext()));}

{ /* Se ignoran */}

/* CUAQUIER OTRO */ . { return new Symbol(tabla_simbolos.terrorlex, yychar,yyline,new String(yytext())); }

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

Parser.cup Para crear el archivo Parser.cup deben agregar a su proyecto un archivo vaco.
package escaner; import java_cup.runtime.*; parser code {: /**Metodo al que se llama automticamente ante algn error sintactico.*/ public void syntax_error(Symbol s){ System.out.println("Error en la Lnea " + (s.right+1) +" Columna "+s.left+ ". Identificador " +s.value + " no reconocido." ); } /**Metodo al que se llama en el momento en que ya no es posible una recuperacin de errores.*/ public void unrecovered_syntax_error(Symbol s) throws java.lang.Exception{ System.out.println("Error en la Lnea " + (s.right+1)+ "Columna "+s.left+". Identificador " + s.value + " no reconocido."); } :} action code {: :} terminal tif , twhile, tfor, tigual, tmas, tmenos, tpcoma, tnumero, terrorlex; non terminal INICIA,L, TIPOS; start with INICIA; INICIA::= L; L::=L TIPOS |TIPOS; TIPOS ::= tif | twhile | tfor | tigual | tmas | tmenos | tnumero | tpcoma | terrorlex | error; {: System.out.println("IF"); :} {: System.out.println("WHILE"); :} {: System.out.println("FOR"); :} {: System.out.println("IGUAL"); :} {: System.out.println("MAS"); :} {: System.out.println("MENOS"); :} {: System.out.println("NUMERO"); :} {: System.out.println("PUNTO Y COMA"); :} {: System.out.println("ERROR LEXICO"); :}

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

CREACIN DE ARCHIVOS DE CONFIGURACIN Para la configuracin de nuestros archivos cambiamos la direccin del atributo JAVA_HOME por la direccin actual donde se encuentra nuestro JDK. Tambin se utilizar la direccin de nuestro proyecto, donde se encuentran nuestros archivos .jflex y .cup Fichero Lexico.bat
SET JAVA_HOME="C:\Program Files\Java\jdk1.7.0_05\bin" SET PATH=%JAVA_HOME%;%PATH% SET CLASSPATH=%JAVA_HOME%; SET JFLEX_HOME= C:\Fuentes\jflex-1.4.3 cd C:\Users\W\Documents\NetBeansProjects\Escaner\src java -jar %JFLEX_HOME%\lib\JFlex.jar Escaner.jflex pause

Fichero Sintactico.bat
SET JAVA_HOME=" C:\Program Files\Java\jdk1.7.0_05\bin " SET PATH=%JAVA_HOME%;%PATH% SET CLASSPATH=%JAVA_HOME%; cd C:\Users\W\Documents\NetBeansProjects\Escaner\src java -classpath C:\Fuentes\ java_cup.Main -parser sintactico -symbols tabla_simbolos Parser.cup pause

PRUEBAS DE COMPILACIN Debemos dar doble click en los ficheros lexico.bat y sintactico.bat. Esto nos crear 3 archivos .java dentro de nuestro proyecto. El primero es el archivo lxico.java que contiene el escner para analizar lxicamente un archivo de entrada; el segundo es el archivo sintctico.java que contiene el parser para analizar sintcticamente un archivo de entrada; el tercero y ltimo es el archivo tabla_simbolos.java que contiene todo lo respectivo a la tabla de smbolos de nuestro compilador. Para probar nuestro compilador agregamos las siguientes lneas de cdigo en el main. El cual analizar el archivo Prueba.txt. Main.java
public static void main(String[] args) { System.out.println("--------------INICIO DE COMPILACIN-----------------"); try {

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

new sintactico(new lexico(new FileInputStream("Prueba.txt"))).parse(); } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); }//fin catch System.out.println("----------------FIN DE COMPILACIN-----------------"); }//fin main

Prueba.txt
2.33333 ; for 3; 2; 1; 4; 5=5 if = 2222; while 45; if 6; 7; 8; 9; %$% Salida (consola Netbeans):

Si todo est correcto nos saldr este texto dentro de la consola de Netbeans:
run: --------------INICIO DE COMPILACIN----------------NUMERO PUNTO Y COMA FOR NUMERO PUNTO Y COMA NUMERO PUNTO Y COMA NUMERO PUNTO Y COMA NUMERO PUNTO Y COMA NUMERO IGUAL NUMERO IF IGUAL NUMERO PUNTO Y COMA WHILE NUMERO PUNTO Y COMA IF NUMERO PUNTO Y COMA NUMERO

Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

PUNTO Y COMA NUMERO PUNTO Y COMA NUMERO PUNTO Y COMA ERROR LEXICO ERROR LEXICO ERROR LEXICO ----------------FIN DE COMPILACIN----------------BUILD SUCCESSFUL (total time: 0 seconds)

NUEVO LOS ARCHIVOS .BAT CORRESPONDIENTES, PARA QUE SE ACTUALICEN LOS ARCHIVOS DE LOS ANALIZADORES.

NOTA: CADA VEZ QUE HAGAN CAMBIOS A SUS ARCHIVOS .JFLEX O .CUP, DEBERN COMPILAR DE

Laboratorio de Compiladores I

También podría gustarte