Está en la página 1de 3

,mnbvcxzTeora de lenguajes formales

Laboratorio de Analizador Lxico

Objetivo
El objetivo de este laboratorio es ver la implementacin de un analizador lxico por medio de la
herramienta JFlex.

Durante la prctica realizaremos las siguientes actividades


1. Instalacin de Jflex
2. Realizacin de analizador Lxico para el lenguaje ejemplo

Explicacin de lenguaje ejemplo


El lenguaje que vamos a trabajar es muy sencillo, nicamente permitir lo siguiente
o Comentarios de lnea //
o Identificadores, los cuales empezaran con una letra mayscula o minscula, seguido de
cualquier combinacin de letra o digito. Ejemplo estudiante, estado1, a5
o Nmeros, no permitir nmeros enteros positivos o negativos
o Simbolos de asignacin =, comparacin ==, mas +, menos -, multiplicacin *
Cualquier otra cosa no ser reconocida en nuestro analizador lxico.

Instalacin de JFlex: Siga los siguientes pasos


Pasos:
1. Descargue el archivo jflex-1.6.1.zip
2. Descomprima el archivo descargado
3. Configuramos el netbeans para que trabaje con la librera de JFlex, para esto vamos a Tool-
>Libraries (Herramientas->Bibliotecas), Damos nueva biblioteca, escribimos en el nombre
JFLex, Luego damos clic en Adicionar JAR, buscamos el jar de jflex (Vamos al directorio donde
descomprimimos Jflex entramos en jflex-1.6.1\lib y seleccionamos jflex-1.6.1.jar) y lo
adicionamos, damos aceptar. Con esto ya deberamos tener la librera JFLex en Netbeans

Realizacin del analizador lxico para el lenguaje ejemplo:


Pasos:
1. Creamos un nuevo proyecto Java Application y le pondremos el nombre JFlexNetbeans
2. Agregamos un archivo vaco llamado Lexer.flex y pegamos el siguiente cdigo
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*/}
"//".* {/*Ignore*/}
"=" {return ASSIGN;}
"==" {return EQUALS;}
"+" {return PLUS;}
"*" {return TIMES;}
"-" {return MINUS;}
{L}({L}|{D})* {lexeme=yytext(); return ID;}
[-+]?{D}+ {lexeme=yytext(); return INT;}
. {return ERROR;}
3. Ahora agregamos un nuevo archivo de tipo ENUM con el nombre Token, ah declararemos todos
nuestros tokens: ID, INT, EQUALS, PLUS, TIMES, ASSIGN, MINUS, ERROR
4. Agregamos la biblioteca JFLEX (Parte izquierda, en bliblioteca, clic derecho agregar biblioteca,
seleccionamos Jflex y aceptar).
5. Vamos a nuestra clase principal. Ya que vamos a usar archivos, importaremos java.io.File.
6. Creamos un mtodo en nuestra clase principal llamado generarLexer. Este mtodo crea un
archivo con un archivo enviado por parmetro y se lo pasa al analizador lxico.
public static void generarLexer(String path){
File file=new File(path);
jflex.Main.generate(file);
}
7. Vamos al mtodo main y en este ponemos las lneas:
String path = "";
generarLexer(path);

En la variable path, vamos a poner la ruta de nuestro archivo lexer, normalmente est dentro
del sr del paquete que hemos creado.
8. Ahora ejecutamos la clase principal, para poder generar el archivo yylex (Es el que contiene el
analizador lexico). Debio aparecer un nuevo archivo llamado Lexer.java
9. Ahora vamos a crear una interfaz, para esto aadimos un nuevo formulario con el nombre
Interfaz, agregamos un textarea, un label y un botn. El label dir Resultado anlisis y el botn
dir Realizar Anlisis. En el textarea aparecern los resultados del anlisis.
10. A la clase Interfaz le agregamos el import para manejo de archivos
11. Creamos un metodo nuevo que se llama probarLexerFile
public void probarLexerFile() throws IOException{
Reader reader = new BufferedReader(new
FileReader("codigo.txt"));
Lexer lexer = new Lexer (reader);
while(true){
Token token = lexer.yylex();
if(token==null){
resultado = resultado+"EOF";
jTextArea1.setText(resultado);
return;
}
switch(token){
case ERROR:
resultado = resultado + "Error, simbolo no
reconocido \n";
case ID: case INT:
resultado = resultado + "TOKEN: "+token+"
"+lexer.lexeme+"\n";
break;
default:
resultado = resultado +"TOKEN: "+token+"\n";
}
}
}
12. Ahora vamos a definir la accin del botn analizar.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jTextArea1.setText("");
File fichero= new File("codigo.txt");
BufferedWriter writer;
try{
writer = new BufferedWriter(new FileWriter(fichero));
writer.write(jTextArea2.getText());
writer.close();
}
catch(IOException ex){
JOptionPane.showMessageDialog(null, "No se pudo guardar
archivo de entrada debido a "+ ex.toString());
}

try{
//probamos nuestra clase Lexer.java
probarLexerFile();
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
}

Hemos terminado, ahora pueden ejecutar el archivo interfaz para probar el resultado.

También podría gustarte