Está en la página 1de 18

UNIVERSIDAD NACIONAL DEL SANTA

FACULTAD DE INGENIERIA
DEPARTAMENTO DE INGENIERIA CIVIL Y DE SISTEMAS E INFORMATICA
E.A.P. INGENIERIA DE SISTEMAS E INFORMATICA

TEORIA DE LENGUAJES Y COMPILADORES


PRACTICA DIRIGIDA Nº 1

I. Objetivo

Utilizar herramientas para generar analizadores lexicográficos

II. Pre-Requisitos

 Conocimientos del lenguaje de programación java en el entorno de NetBeans


 Conocimiento de teoría de autómatas y expresiones regulares

III. Desarrollo

a. Descargar JFLex
1. Descargar el JFlex de la página oficial: http://www.jflex.de/download.html
2. Desempaquetar el archivo: jflex-1.4.3.zip
3. Buscar la librería de JFLEX que debe estar localizada en:
JFLEX-1.4.3\JFLEX-1.4.3\LIB
Con el nombre: JFlex de tipo Executable Jar File
4. Copiar dicha librería en una carpeta que permitirá una rápida localización al
integrarlo en NetBeans

b. Integrar JFlex en NetBeans


1. Ejecutar la aplicación NetBeans IDE
2. Integrar la librería JFlex en NetBeans IDE
i. En el menú Herramientas (tools), dar clic en Añadir librerías (ant
Library)

ii. Dar clic en nueva librería (New Library)


iii. En nombre Librería (Library Name) digitar JFlex y dar clic en Aceptar
(OK)

iv. Dar clic en Añadir Jar/Carpeta (Jar/Folder)


v. Localizar la librería JFlex copiada anteriormente en la carpeta de rápida
localización y dar clic en Añadir Jar/Carpeta (Jar/Folder)

vi. Dar clic en aceptar (OK), para finalizar la integración de JFlex en


NetBeans. Es decir, ya se agregó la librería JFlex a NetBeans.

c. Crear un proyecto para un analizador lexicográfico


1. Crear un nuevo proyecto Java Application

2. El nombre del proyecto será: JFlexNetBeans


3. Dar clic en Terminar (Finish)

4. Agregar un archivo vacío: JFlexNetBeans – Nuevo - Otro


En categoría seleccionar: otro (Others)
En tipo de archivo seleccionar: Archivo vacío (Empty file)

Dar clic en Siguiente (Next)


5. En Nombre de Archivo (File Name) digitar: Lexer.flex

6. Dar clic en Terminar (Finish)


7. Digitar el siguiente código y luego dar clic en grabar.
package jflexnetbeans;
import static jflexnetbeans.Token.*;
%%
%class Lexer
%type Token
L = [a-zA-Z_]
D = [0-9]
WHITE=[ \t\r\n]
%{
public String lexeme;
%}
%%
{WHITE} {/*Ignore*/}
"=" {return ASSIGN;}
"+" {return SUMA;}
"*" {return MULT;}
"-" {return RESTA;}
"/" {return DIV;}
{L}({L}|{D})* {lexeme=yytext(); return ID;}
("(-"{D}+")")|{D}+ {lexeme=yytext(); return INT;}
. {return ERROR;}
8. Agregamos una nueva clase de tipo enum

Seleccionamos Nuevo – Otro (New - Other)


En nombre de la clase digitamos: Token

Luego damos clic en Terminar (Finish)

En el método enum , definimos todos los tokens.

public enum Token {


ID, INT, SUMA, RESTA, DIV, MULT, ASSIGN, ERROR
}

Luego dar clic en guardar


9. Agregamos la biblioteca JFlex

Damos clic en añadir librería (Add Library)

10. En la clase principal Main.java

Agregar despues de package jflexnetbeans;


import java.io.File;

En el método main, escribimos:

String path = " C:/UNS/Practicas/JAVA/JFlexNetBeans/src/jflexnetbeans/Lexer.flex";


generarLexer(path);
La ruta puede variar en cada computador, para ello debe buscar el archivo
Lexer.flex y reemplazar dicha ruta.

Luego agregar la clase generarLexer:

public static void generarLexer(String path){


File file=new File(path);
JFlex.Main.generate(file);

Quedando de esta manera:

Luego ejecutamos la clase principal Main.java para generar la clase


Lexer.java
Hasta aquí ya se creo el analizador lexico

d. Creando la interfaz para el analizador lexicográfico

1. Agregando un formulario

El nombre de la clase será: interfaz

Luego dar clic en Terminar (Finish)


Agregamos los controles al formulario como se muestra a continuacion:

Etiqueta: “Ingrese el texto”


Caja de texto: Para ingresar la cadena a analizar
Botón: “Analizar”
Etiqueta: “Resultado”
Área de texto: Para mostrar los resultados

Los nombres son los establecidos por defecto.


2. Agregar el método probarLexerFile como se indica a
continuación:
public void probarLexerFile() throws IOException{
File fichero = new File ("fichero.txt");
PrintWriter writer;
try {
writer = new PrintWriter(fichero);
writer.print(jTextField1.getText());
writer.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
Reader reader = new BufferedReader(new FileReader("fichero.txt"));
Lexer lexer = new Lexer (reader);
String resultado="";
while (true){
Token token =lexer.yylex();
if (token == null){
resultado = resultado + " EOF";
jTextField1.setText(resultado);
return;
}
switch (token){
case ERROR:
resultado=resultado+ "Error, símbolo no reconocido \n";
break;
case SUMA:
resultado=resultado+ "TOKEN SUMA \n";
break;
case RESTA:
resultado=resultado+ "TOKEN RESTA \n";
break;
case MULT:
resultado=resultado+ "TOKEN MULT \n";
break;
case DIV:
resultado=resultado+ "TOKEN DIV \n";
break;
case ASSIGN:
resultado=resultado+ "TOKEN ASSIGN \n";
break;
case ID:
resultado=resultado+ "TOKEN ID <" + lexer.lexeme + "> \n";
break;
case INT:
resultado=resultado+ "TOKEN INT <" + lexer.lexeme + "> \n";
break;
default:
resultado=resultado+ "TOKEN <"+ lexer.lexeme + "> ";
}
}
}

3. Agregar el código al botón analizar

try{
probarLexerFile();
}
catch (IOException ex){
System.out.println(ex.getMessage());
}

4. Probando el analizador: Seleccionar la clase interfaz.java


luego Run File
Viendo los resultados:

e. Tarea
Escribir expresiones regulares para números reales y agregarlos en el archivo
Lexer.flex y realizar las pruebas del caso.

También podría gustarte