Estructura Archivo JLex

Estructura del Archivo Jlex

Un archivo de entrada Jlex, es un archivo plano con la siguiente estructura:

codigo del usuario
%%
Directivas Jlex
%%
Reglas para las Expresiones Regulares

Código del Usuario

Es la parte del archivo de entrada donde se coloca el codigo java que deseamos usar en la clase que será generada, esto quiere decir que Jlex copiará directamente el codigo a la clase generada, aqui deben ir los importes a otras librerias. TODO ESTO ANTES DE LOS PRIMEROS (%%).

Directivas JLex

En esta seccíon irán las directivas, o especificaciones para que opere JLEX, para obtener la salida deseada.

Reglas para las Expresiones Regulares

En esta seccion del archivo Jlex, es donde se definen las reglas para obtener los tokens de la cadena que se esta leyendo.

Con un ejemplo explicare mejor cada una de estas secciones.

Para el ejemplo escribí un programa que reconoce las siguientes palabras reservadas:

int, string, if, then, else, for, while

Reconoce identificadores, y enteros.

El codigo para hacer Jlex para genera el analizador lexico del ejemplo es el siguiente:

/*AQUI PUEDEN IR LOS IMPORTS */
%%
%{
/*CODIGO USUARIO*/
/*Pequeña funcion para imprimir en pantalla*/

public void imprime(String foo){
System.out.println(foo)
}
%}
/*DIRECTIVAS JLEX*/
%class Yylex
%public
%full
%char
%line
%cup
%eofval{
System.out.println("FIN DEL ARCHIVO");
%eofval}
entero=[0-9]
Id=[a-zA-Z][a-zA-Z0-9]*
%%
/* MANEJO DE LAS PALABRAS RESERVADAS*/
"while"  {imprime("while");
}
"int"   {imprime("int");}
"if" {imprime("if");}
"then" {imprime("then");}
"for"{imprime("for");}
/*expresion regular para un entero, tomando el conjunto definiddo
anteriormente como entero*/
/*un entero 1 o mas veces*/
({entero})+  {imprime("entero"+}
{Id} {imprime("Identificador");}
/*con la siguiente linesa ignoramos los espacios en blanco*/
(" ") {System.out.println("espacio");}
/*con esta ignoramos los saltos de linea, tabulaciones,*/
[\t\r\n\f] {}
/*error lexico:*/
. {System.out.println("error");}

}/*error lexico:*/. {System.out.println("error");}

El código escrito dentro de los corchetes es el el código que queremos que se ejecute cada vez que el scanner encuentra los tokens a su izquierda. Este código queda sin modificar a la hora de generar el archivo de salida java

5 comentarios to “Estructura Archivo JLex”

  1. Hola qué tal, iré directo al grano…
    Dices que «Código del usuario» debe ir antes de los primeros %%
    Luego en el código pones lo siguiente:

    /*AQUI PUEDEN IR LOS IMPORTS */
    %%
    %{
    /*CODIGO USUARIO*/

    Poniendo el código del usuario luego de los primeros %%

    Puedes explicarme eso?

  2. no se si puedas poner el proyecto para volver a real izarlo y practicar con el código !

  3. Qué tal Gandhy, el código en el tutorial no pertenece a ningún proyecto en especifico.

  4. Al buen entendedor, pocas palabras. ¡Gracias por el aporte colega!

  5. Saludos! fijate que tengo problema cuando lee el caracter ‘\’, no sabes a que se debe?

Deja un comentario