Universidad de San Carlos de Guatemala Facultad de Ingeniería – Escuela de Ciencias y Sistemas...

12
Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013 1 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

Transcript of Universidad de San Carlos de Guatemala Facultad de Ingeniería – Escuela de Ciencias y Sistemas...

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

1

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

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

2

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”

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

3

Crear un nuevo proyecto en Netbeans (o el IDE que se este usando para JAVA)

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

4

Dentro del proyecto agregar una nueva carpeta a la cual se le llamara “lib” donde se agregara java-

cup-11a-runtime.jar

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

5

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 Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

6

{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." );

}

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

7

/**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

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

8

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----------------");

}

}

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

9

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

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

10

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í:

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

11

Y en el proyecto ya estarán las nuevas clases.

Universidad de San Carlos de Guatemala Roger Alexander Girón Moscoso Facultad de Ingeniería – Escuela de Ciencias y Sistemas 2011-14674 Organización de Lenguajes y Compiladores 1 Guatemala 2013

12

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: