Está en la página 1de 8

Universidad de San Carlos de Guatemala

Manual de instalacin
de JFlex y Cup
Windows SO
Facultad de Ingeniera Escuela de Ciencias y Sistemas

Werner Aldana Caldern


Laboratorio de Compiladores I

Manual de instalacin de JFlex y CUP Windows

INSTALACIN

IMPORTANTE: Para poder instalar JFlex y Cup primeramente se tiene que tener

instalado JDK dentro de nuestra mquina.

Para efecto de este tutorial usaremos el IDE Netbeans para los archivos de configuracin.
DESCARGA DE LIBRERAS

Descargamos

las

fuentes

http://jflex.de/download.html.

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}

*/

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

/* BLANCOS */
[ \t\r\f\n]+

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

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

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

Laboratorio de Compiladores I

También podría gustarte