Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INSTALACIN
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
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
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 */
{ /* Se ignoran */}
Laboratorio de Compiladores I
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
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
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
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