Descargar CUP el cual es un LALR parser o look ahead from left to right parser. En especial el CUP 10k y la librera CUP 11a beta 20060608
Universidad de San Carlos de Guatemala Facultad de Ingeniera Escuela de Ciencias y Sistemas Organizacin de Lenguajes y Compiladores 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 versin 10k de javacup lo que interesa descomprimir es principalmente la carpeta java_cup
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Crear un nuevo proyecto en Netbeans (o el IDE que se este usando para JAVA)
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Dentro del proyecto agregar una nueva carpeta a la cual se le llamara lib donde se agregara javacup-11a-runtime.jar
Universidad de San Carlos de Guatemala Facultad de Ingeniera Escuela de Ciencias y Sistemas Organizacin de Lenguajes y Compiladores 1 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*/
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 {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())); }
package scanner; 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 Linea " + (s.right+1) +" Columna "+s.left+ ". Identificador " +s.value + " no reconocido." ); }
Universidad de San Carlos de Guatemala Facultad de Ingeniera Escuela de Ciencias y Sistemas Organizacin de Lenguajes y Compiladores 1
/**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 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
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Dentro del main de el proyecto de java se agregaran las siguientes lneas, los cuales agarraran a las clases lxico y sintctico que generaran los .bat (posteriormente ejecutndolos o desde consola). Por eso la necesidad de que estn 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----------------"); } }
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Crear los archivos de configuracin de el lxico y del sintctico. 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
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Luego generar los .java a travs de compilar los archivos de CUP y JFLEX. A travs de primero ejecutar los .bat para que luego entre en el paquete los dems .java que este proceso generar. Y saldrn unas pantallas as:
10
Universidad de San Carlos de Guatemala Facultad de Ingeniera Escuela de Ciencias y Sistemas Organizacin de Lenguajes y Compiladores 1
11
Universidad de San Carlos de Guatemala Roger Alexander Girn Moscoso Facultad de Ingeniera Escuela de Ciencias y Sistemas 2011-14674 Organizacin de Lenguajes y Compiladores 1 Guatemala 2013 Si no aparecen las clases: buscar donde se generaron / compilaron (buscar cerca de los .JFlex y .CUP)
12