MANUAL DE INSTALACION JFLEX Y CUP EN S.O. WINDOWS Descargar JFlex, el cual es un generador de análisis léxico. Se usó JFlex versión 1.4.3. Descargar CUP el cual es un LALR parser o look ahead from left to right parser. En especial el CUP 10k y la librería CUP 11a beta 20060608 1
Crear Carpeta Fuentes dentro de el disco duro principal Descomprimir contenido de los 2 archivos comprimidos que se bajaron, dentro de la carpeta creada. De la versión 10k de javacup lo que interesa descomprimir es principalmente la carpeta java_cup 2
Crear un nuevo proyecto en Netbeans (o el IDE que se este usando para JAVA) 3
Dentro del proyecto agregar una nueva carpeta a la cual se le llamara lib donde se agregara javacup-11a-runtime.jar 4
Crear el archivo de Jflex, el cual se llamara Scanner.Jflex package scanner; import java_cup.runtime.symbol; %% numero =[0-9]+ "."? [0-9]* letra =[a-za-zññ]+ iden ={letra}({letra} {numero} "_")* %cupsym simbolos %class lexico %cup %unicode %public %line %char %ignorecase %% /*Expresiones Regulares*/ 5
{numero} {return new Symbol(simbolos.numero, yychar,yyline,new String(yytext()));} {iden} {return new Symbol(simbolos.iden, yychar,yyline,new String(yytext()));} /*Operadores*/ "=" {return new Symbol(simbolos.igual, yychar,yyline); } "+" {return new Symbol(simbolos.mas, yychar,yyline); } "-" {return new Symbol(simbolos.menos, yychar,yyline); } ";" {return new Symbol(simbolos.pcoma, yychar,yyline); } /*Espacios en Blanco*/ [ \t\r\f\n]+ { /* Se ignoran */} /* Cualquier Otro */. { return new Symbol(simbolos.errorlex, yychar,yyline,new String(yytext())); } También crear el archivo CUP, el cual se le llamara Parser.cup package scanner; import java_cup.runtime.*; parser code {: /**Metodo al que se llama automáticamente ante algún error sintactico.*/ public void syntax_error(symbol s){ System.out.println("Error en la Linea " + (s.right+1) +" Columna "+s.left+ ". Identificador " +s.value + " no reconocido." ); } 6
/**Metodo al que se llama en el momento en que ya no es posible una recuperación de errores.*/ public void unrecovered_syntax_error(symbol s) throws java.lang.exception{ System.out.println("Error en la Linea " + (s.right+1)+ "Columna "+s.left+". Identificador " + s.value + " no reconocido."); } :} action code {: :} /*Declaracion de simbolos terminales*/ terminal iden, numero, mas, menos, igual, pcoma, errorlex; /*Declaracion de simbolos NO terminales*/ non terminal INICIA,L, LISTA; /*Inicio de la gramatica*/ start with INICIA; INICIA::= L; L::=L LISTA LISTA; LISTA ::= iden {: System.out.println("Identificador"); :} numero {: System.out.println("Numero"); :} mas {: System.out.println("Mas"); :} menos {: System.out.println("Menos"); :} igual {: System.out.println("Igual"); :} pcoma {: System.out.println("Punto y coma"); :} errorlex {: System.out.println("Error Lexico"); :} error; De preferencia crearlos dentro del src de el proyecto (dentro del source a la par de los.java) Se puede crear con bloc de notas 7
Dentro del main de el proyecto de java se agregaran las siguientes líneas, los cuales agarraran a las clases léxico y sintáctico que generaran los.bat (posteriormente ejecutándolos o desde consola). Por eso la necesidad de que estén en la misma carpeta donde tienen los.java package scanner; import java.io.bufferedreader; import java.io.stringreader; public class main { public static void main(string[] args) throws Exception { String Cadena = "t1 = 3;\n" + "t2 = t2 + 7;\n" + "t3 = 25 * 5:\n"; System.out.println("---------------Inicio Analisis---------------"); new sintactico(new lexico(new BufferedReader( new StringReader(Cadena)))).parse(); System.out.println("----------------Fin Analisis----------------"); } } 8
Crear los archivos de configuración de el léxico y del sintáctico. Especialmente concentrar donde es que queda el JAVA_HOME que es donde se encuentre el JDK y donde se encuentran los archivos.jflex y.cup SET JAVA_HOME="C:\Program Files\Java\jdk1.6.0_31\bin" SET PATH=%JAVA_HOME%;%PATH% SET CLASSPATH=%JAVA_HOME%; SET JFLEX_HOME= C:\Fuentes\jflex-1.4.3 cd C:\Users\GaOs\Documents\NetBeansProjects\Scanner\src\scanner java -jar %JFLEX_HOME%\lib\JFlex.jar Scanner.jflex pause SET JAVA_HOME="C:\Program Files\Java\jdk1.6.0_31\bin" SET PATH=%JAVA_HOME%;%PATH% SET CLASSPATH=%JAVA_HOME%; cd C:\Users\GaOs\Documents\NetBeansProjects\Scanner\src\scanner java -classpath C:\Fuentes\ java_cup.main -parser sintactico -symbols simbolos Parser.cup pause 9
Luego generar los.java a través de compilar los archivos de CUP y JFLEX. A través de primero ejecutar los.bat para que luego entre en el paquete los demás.java que este proceso generará. Y saldrán unas pantallas así: 10
Y en el proyecto ya estarán las nuevas clases. 11
Si no aparecen las clases: buscar donde se generaron / compilaron (buscar cerca de los.jflex y.cup) Finalmente compilar el proyecto con lo cual se obtendrá algo asi: 12