Jlex
Escuela Técnica Superior de Ingeniería Informática
Procesadores de Lenguajes
Práctica de Procesadores de
Lenguajes
Análisis Léxico con JLex
Javier Vélez Reyes
jvelez@lsi.uned.es
Javier Vélez Reyes jvelez@lsi.uned.es
Objetivos
Funcionamiento del generador de escáneres JLex
Instalación
Introducción
Utilización
Especificación deescáneres en JLex
Especificación de código de ayuda
Especificación de patrones
Especificación de acciones
Integración con el generador de parsers Cup
1
Javier Vélez Reyes jvelez@lsi.uned.es
Índice
Instalación
Introducción
Especificación
Código de Usuario
Directivas JLex
Reglas patrón-acción
Javier Vélez Reyes jvelez@lsi.uned.es
Instalación
Instalación de Java
DescargarJDK de la página Web de Sun
Instalar JDK
Crear una variable de entorno CLASSPATH
Crear una variable de entorno JAVA_HOME a /bin
Instalación de JLex
Descargar de http://garoe.lsi.uned.es/procleng/practica
Crear directorio de trabajo /pdl
Crear directorio para JLex /pdl/JLex
Copia en /pdl/JLex el fichero Main.java de JLex
Compila Main.java javac Main.java
2
Javier Vélez Reyesjvelez@lsi.uned.es
Introducción
Pasos
Especificar scanner.lex en JLex
Lanzar JLex a ejecución con scanner.lex
java –classpath %classpath%;dir Main scanner.lex
Renombrar a Yylex.java (opcional si se configura JLex)
Compilar Yylex.java a Yylex.class
Interpretar Yylex.class
Scanner.lex
JLex
Yylex.
java
Javac
Yylex.
class
Java
Javier Vélez Reyes jvelez@lsi.uned.esIntroducción
Utilización
Fichero fuente de entrada source.c
Llamada a yylex()
Obtener secuencia de tokens
Scanner
Source.c
Basado en
especificaciones JLex
TOKEN TOKEN …
3
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción
Funcionamiento
Scanner.lex
Scanner.lex.java
Javier Vélez Reyes jvelez@lsi.uned.es
Especificación
Tres partes separadas por
Código de Usuario%%
Scanner.lex
Código de ayuda
Se copia al inicio
Import, package, helper class
Directivas JLex
Macros
Ordenes a JLex
Configurar comportamiento
Reglas patrón-acción
Determinar el DT del scanner
Determinar acciones a tomar
Determinar patrones
Gestionar estados
4
Javier Vélez Reyes jvelez@lsi.uned.es
Código de Usuario
Código de usuario
Código de ayuda utilizado dentrode las acciones
Se copia al inicio del programa
No se recomienda definir la clase Token
Suelen aparecer
Importación de clases
Declaración de paquetes
Clases de ayuda
Definición de la clase Token
dentro del fichero jlex. Para mayor claridad es
preferible implementarlo en un fichero aparte
e importarlo desde aquí con una cláusula
import.
Para la practica, sin embargo, se recomiendautilizar la clase Symbol de la herramienta Cup
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
Código Interno a Clase de Analizador
El código entre %{ y %} se copia al inicio de YyLex
5
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
Init
El código entre %init{ y %} se copia al constructor
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
Initthrow%initthrow{ excepción, excepción,… %} define
excepciones que se lanzan en constructor
6
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
Yylex y Excepciones
%yylexthrow{ excepción , … %} define excepciones
lanzadas por la función yylex()
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
End of file y excepciones
%eof{ … %} se ejecuta tras encontrar EOF
%eofval{ … %}especifica el valor devuelto al EOF
%eofthrow{ excepción , … %} lanza al encontrar EOF
7
Javier Vélez Reyes jvelez@lsi.uned.es
Directivas JLex
Definiciones de macros
Nombre = definición define una macro
La macro sirve para dulcificar la sintaxis en las reglas
Debe estar definida en una sola línea
Una macro puede usar otra nombre = …{nombre}…
Javier Vélez Reyes jvelez@lsi.uned.es...
Regístrate para leer el documento completo.