Presentacion JFlex USC (Compiladores) 2011B
-
Upload
kuritzuthian -
Category
Education
-
view
1.037 -
download
1
description
Transcript of Presentacion JFlex USC (Compiladores) 2011B
![Page 1: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/1.jpg)
![Page 2: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/2.jpg)
TABLA DE CONTENIDO
Introducción
Especificación léxica
Código de usuario
Opciones y declaraciones
Reglas léxicas
Funciones en JFlex
![Page 3: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/3.jpg)
INTRODUCCIÓN A JFLEX
QUE ES JFLEX:
« Es una herramienta que genera analizadores léxicos, escritos en Java »
Es un generador de programas java diseñado para procesamiento léxico.
1. Parte de un conjunto de reglas léxicas.
2. JFlex produce un programa llamado yylex que reconoce las cadenas que
cumplen dichas reglas
![Page 4: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/4.jpg)
COMO TRABAJA JFLEX
Definición
del ALJFlex Analizador Lexico
![Page 5: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/5.jpg)
INTRODUCCION
Reglas ≈ Expresiones regulares.
Expresiones regulares Autómata Finito Determinista.
yylex ≡ implementación del A.F.D.
A cada regla se asocian un conjunto de acciones.
Cuando yylex encuentra una cadena que cumple una regla, ejecuta las
acciones asociadas a esa regla.
![Page 6: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/6.jpg)
COMO SE USAN?
Básicamente, se les da un archivo de entrada, con las especificaciones del analizador que
queremos generar.
Estas herramientas se encargan de generarlos, para poder así utilizar los analizadores
generados, en cualquier proyecto de Java.
![Page 7: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/7.jpg)
INTRODUCCION
Hay diferentes usos:
Transformaciones simples
Análisis
Estudios estadísticos
La velocidad suele ser proporcional a la cantidad de caracteres en la entrada.
El número o la complejidad de la reglas sólo influyen sobre el tamaño del
autómata.
![Page 8: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/8.jpg)
ESPECIFICACIÓN LÉXICA
Formato general:
{Código de usuario}
%%
{Opciones y declaraciones}
%%
{Reglas léxicas}
![Page 9: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/9.jpg)
CODIGO DE USUARIO
El código auxiliar necesario para el traductor léxico.
El contenido se copia tal y como aparece en la especificación, al principio del
código fuente generado por JFlex.
Ej. Package , import , etc.
![Page 10: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/10.jpg)
OPCIONES Y DECLARACIONES
Contenido:
I. Opciones del código generado
II. Código fuente específico
III. Macros y estados
![Page 11: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/11.jpg)
OPCIONES Y DECLARACIONES
Opciones del código generado:
• %class nombre Especifica el nombre de la clase generada como salida de Jflex
• %line y %column activan cuenta de líneas ( yyline ) y columnas ( yycolumn ) respectivamente.
• %standalone Genera programa que acepta un fichero de entrada en línea de comando.
• %debug Durante la ejecución muestra: nº línea de la especificación, lexema reconocido y acción
ejecutada.
![Page 12: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/12.jpg)
OPCIONES Y DECLARACIONES
Código fuente específico:
• %{ … %}
Código copiado tal cual en la clase.
• %init{ … %init}
Código copiado tal cual en el constructor de la clase.
• %eofval{ … %eofval}
Código que se ejecutará cada vez que alcanzamos un final de fichero.
![Page 13: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/13.jpg)
OPCIONES Y DECLARACIONES
Macros y estados:
• Macros ≈ definiciones regulares.
DigitoHex = [0-9a-fA-F]
NumeroBinario = “b” [01]+
• Los estados condicionan las reglas léxicas que se comprueban.
%state nombre1, nombre2, …
%xstate nombre3, nombre4, …
![Page 14: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/14.jpg)
REGLAS LÉXICAS
Formato:
expresión { … acciones …}
Funcionamiento:
Cuando se detecta un lexema que cumple el patrón definido en la expresión
se ejecutan las acciones asociadas (código java)
![Page 15: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/15.jpg)
REGLAS LÉXICAS
Especificación de las expresiones:
• ≈ expresiones regulares: sean a y b expresiones válidas
a | b Unión
a b Concatenación
a* Repetición 0 o N veces
a+ Repetición 1 o N veces (= a a* )
a? Opcionalidad
!a Negación
~a Cualquier cosa que termine en a .
![Page 16: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/16.jpg)
REGLAS LÉXICAS
Especificación de las expresiones:
• ≈ expresiones regulares:
{ nombre } Utilización de una macro
“…” Cadena de caracteres
[…] Clases de caracteres
Algunas predefinidas:
. Cualquier carácter excepto \n
[:letter:] Letras
[^…] Complementario de clases de caracteres
![Page 17: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/17.jpg)
REGLAS LÉXICAS
Especificación de las expresiones:
• Caracteres especiales:
| ( ) { } [ ] < > \ . * + ? ^ $ / . " ~ !
• Utilización de estados:
<estado1,estado2,…> expresión {…acciones…}
Activación de un estado: yybegin(estado)
Desactivación: activación de otro distinto a él.
Estado activo por defecto <YYINITIAL>
Las expresiones sin estado asociado corresponden al estado <YYINITIAL>
![Page 18: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/18.jpg)
REGLAS LÉXICAS
Funcionamiento, comprobación de expresiones:
Las acciones asociadas a una expresión se ejecutarán si:El lexema concuerda con la expresión y:
a) O la expresión está asociada a un estado activo, ya sea inclusivo ( %state ) o exclusivo ( %xstate ).
b) O la expresión no está asociada a ningún estado pero el estado activo es inclusivo.
<YYINITIAL> es un estado inclusivo
![Page 19: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/19.jpg)
REGLAS LÉXICAS
Funcionamiento, comprobación de expresiones:
…
Varias expresiones posibles: lexema más largo.
Sin expresión posible: se para e informa del error, excepto con la opción
%standalone , que imprime en la salida estándar.
![Page 20: Presentacion JFlex USC (Compiladores) 2011B](https://reader035.fdocuments.ec/reader035/viewer/2022073010/559c45eb1a28ab9a218b4652/html5/thumbnails/20.jpg)
FUNCIONES DE JFLEX
yytext() Devuelve el lexema reconocido.
yylength() Devuelve el la longitud del lexema.
yycharat( int n ) Devuelve el enésimo carácter del lexema reconocido.
yypushback( int n ) Considera los n últimos caracteres del lexema reconocido
como no procesados.
Se volverán a leer, pero no se tendrán en cuenta para:
yytext() e yylength() .