jlex y javacup

18
ELSA LILIANA DE LEON JUAREZ 200312865 USAC FACULTAD DE INGENIERIA COMPILADORES1 SECCION “C”

Upload: liliana-de-leon

Post on 07-Jun-2015

3.925 views

Category:

Documents


5 download

DESCRIPTION

Presentacion instalacion Jlex y Cup en java, plataforma windows......Elsa Liliana De León Juárez200312865compiladores1 Sección "C"

TRANSCRIPT

Page 1: Jlex y Javacup

ELSA LILIANA DE LEON JUAREZ200312865USAC FACULTAD DE INGENIERIACOMPILADORES1 SECCION “C”

Page 2: Jlex y Javacup

Jlex es una herramienta desarrollada en Java que toma como entrada un archivo “lexico”, con este genera un archivo fuente lexico.lex.java correspondiente al Analizador lexico.Y JAVACUP es un analizador sintactico o sea un parser-generador que construye un parser para gramaticas tipo LALR(1).

Page 3: Jlex y Javacup

1)JDK solo es necesario buscar el directorio en el que se encuentra y si no se tiene instalado un JDK se puede descargar de la Pag Web de Sun para el sistema Operativo que se tenga, en este caso se utilizo Windows.

2)Archivo par la generación de las clases para JLex llamado Main.java que se puede descargar de la página Web de Jlex.

3)Descargar del sitio Web de Cup el código fuente de los archivos necesarios.

Page 4: Jlex y Javacup

En la carpeta bin del JDK se debe crear una carpeta, que se llamara Jlex donde se incluira el Main.java y tambien en el bin del JDK se debe colocar la carpeta java-cup la que se descargo del sitio CUP.

Page 5: Jlex y Javacup
Page 6: Jlex y Javacup
Page 7: Jlex y Javacup

Ahora debemos generar las variables de entorno, para lo cual debemos abrir una consola del DOS(Comand Prompt).1)Primero nos colocamos en el directorio donde se encuentra la carpeta bin del JDK desde la consola.Por Ejemplo en este caso seria:

C:\Archivos de programa\Java\jdk1.6.0\bin2)Luego escribimos en la consola las variables de entorno a utilizar.

c:\Archivos de programa\Java\jdk1.6.0\bin> setCLASSPATH=C:\Archivos de programa\Java\jdk1.6.0\bin>;%CLASSPATH%C:\ Archivos de programa\Java\jdk1.6.0\bin> set PATH=C:\Archivos de programa\Java\jdk1.6.0\bin>;%PATH%

Page 8: Jlex y Javacup

3)Y ya tenemos entonces generadas las variables de entorno, Ahora se debe compilar la clase Main.java, para ellos escribimos en la consola.

C:\Archivos de programa\Java\jdk 1.6.0\bin> javac Jlex\Main.java

Page 9: Jlex y Javacup

Con esto se generaran una serie de archivos dentro de la carpeta Jlex.Las carpetas del Cup no es necesario compilarla ya que ya vienen compiladas, listas para utilizarse.4)Ahora creamos nuestros archivos .lex y .cup. El archivo lex sera el que contendra los caracteres y las expresiones regulares validas y el cup contendra la gramatica.5)Para comenzar creamos una carpeta en la ubicación que queramos que llamaremos Ejemplo_Numero binario y dentro de ella copiamos la carpeta de java-cup y Jlex que compilamos anteriormente, y tambien nuestro archivo .lex y .cup.

Page 10: Jlex y Javacup

En un archivo de texto podemos escribir el siguiente codigo y guardarlo con extensión .leximport java_cup.runtime.Symbol;import java.io.*;import java.lang.*;

%%binario="0"|"1"pcoma=";"

%cup%line%char%%

{binario} {return new Symbol(sym.BINARIO, new String(yytext()));}{pcoma} {return new Symbol(sym.PCOMA, new String(yytext()));}[ \t\r\f\n]+ {}. {System.out.println("Error lexico");}

Page 11: Jlex y Javacup

En un archivo de texto podemos escribir el siguiente codigo y guardarlo con extensión .cupimport java_cup.runtime.*;import java.io.*;import java.lang.*;

parser code {: public static void main(String args[]) throws Exception

{ System.out.println("Archivo de entrada: "+args[0]);new parser(new Yylex(new

FileInputStream(args[0]))).parse();

} // fin procedimiento

public void syntax_error(Symbol s) { String cadena=""; report_error("Error de sintaxis",null); } // fin procedimiento

:}

Page 12: Jlex y Javacup

action code{: int decimal=0; // Variable que almacena el numero decimal String cadena=""; // Cadena que contiene el numero binario

:}

terminal String BINARIO, PCOMA;

non terminal S, F, E;

start with S;

S ::= F;F ::= F E PCOMA {:System.out.println(cadena+" = "+decimal); decimal=0; cadena="";:};F ::= E PCOMA {:System.out.println(cadena+" = "+decimal); decimal=0; cadena="";:};E ::= E BINARIO:val {:cadena=cadena+val; decimal=decimal*(2)+(new Integer(val).intValue());:};E ::= BINARIO:val {:cadena=cadena+val; decimal=new Integer(val).intValue();:};

Page 13: Jlex y Javacup

Ahora Compilemos:Para compilar el archivo de jlex debemos escribir en la consola adentro de la carpeta que lo necesitemos y donde se encuentre las carpetas de Jlex y Cup, o sea en nuestra carpeta que creamos que se llama: Ejemplo_Numero binarios.Para compilar el lexico.lex escribimos en la consola

java Jlex.Main lexico.lexNos genera un archivo lexico.lex.java, lo renombramos Yylex.java

Page 14: Jlex y Javacup
Page 15: Jlex y Javacup

Ahora compilamos el sintactico, escribimos en la consola.

Java java_cup.Main sintactico.cup

Page 16: Jlex y Javacup

Ahora escribimosJavac parser.java Yylex.java Sym.java

Page 17: Jlex y Javacup

Ahora ya podemos probarlo ingresando un archivo de entrada que llamamos entrada.txt11011;1100111;1010;1111000;Luego ejecutamos el comando

java parser entrada.txt

Page 18: Jlex y Javacup

Y obtendremos en consola la siguiente salida.