0% encontró este documento útil (0 votos)
168 vistas14 páginas

Manual JLex

Este documento proporciona una introducción al uso del generador de analizadores léxicos JLex. Explica cómo instalar JLex, su funcionamiento general y los pasos para especificar un analizador léxico con JLex, incluyendo la estructura del fichero de especificación con secciones para código de usuario, directivas y reglas de patrones-acciones. También describe varias directivas JLex para configurar el comportamiento y la integración con el generador de sintácticos Cup.

Cargado por

Awf Awf
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
168 vistas14 páginas

Manual JLex

Este documento proporciona una introducción al uso del generador de analizadores léxicos JLex. Explica cómo instalar JLex, su funcionamiento general y los pasos para especificar un analizador léxico con JLex, incluyendo la estructura del fichero de especificación con secciones para código de usuario, directivas y reglas de patrones-acciones. También describe varias directivas JLex para configurar el comportamiento y la integración con el generador de sintácticos Cup.

Cargado por

Awf Awf
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA

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


[email protected]

Javier Vélez Reyes [email protected]

Objetivos
„ Funcionamiento del generador de escáneres JLex
„ Instalación
„ Introducción
„ Utilización
„ Especificación de escá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 [email protected]

Índice
„ Instalación
„ Introducción
„ Especificación
„ Código de Usuario
„ Directivas JLex
„ Reglas patrón-acción

Javier Vélez Reyes [email protected]

Instalación
„ Instalación de Java
„ Descargar JDK 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 Reyes [email protected]

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

Yylex. Yylex.
Scanner.lex JLex java Javac class Java

Javier Vélez Reyes [email protected]

Introducción
„ Utilización
„ Fichero fuente de entrada source.c
„ Llamada a yylex()
„ Obtener secuencia de tokens

Scanner
Source.c TOKEN TOKEN …
Basado en
especificaciones JLex

3
Javier Vélez Reyes [email protected]

Introducción
„ Funcionamiento
Scanner.lex Scanner.lex.java

Javier Vélez Reyes [email protected]

Especificación
„ Tres partes separadas por %%
Scanner.lex
„ Código de Usuario
„ 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 [email protected]

Código de Usuario
„ Código de usuario
„ Código de ayuda utilizado dentro de las acciones
„ Se copia al inicio del programa
„ Suelen aparecer No se recomienda definir la clase Token
dentro del fichero jlex. Para mayor claridad es
„ Importación de clases preferible implementarlo en un fichero aparte
e importarlo desde aquí con una cláusula
„ Declaración de paquetes import.
Para la practica, sin embargo, se recomienda
„ Clases de ayuda utilizar la clase Symbol de la herramienta Cup
„ Definición de la clase Token

Javier Vélez Reyes [email protected]

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 [email protected]

Directivas JLex
„ Init
„ El código entre %init{ y %} se copia al constructor

Javier Vélez Reyes [email protected]

Directivas JLex
„ Initthrow
„ %initthrow{ excepción, excepción,… %} define
excepciones que se lanzan en constructor

6
Javier Vélez Reyes [email protected]

Directivas JLex
„ Yylex y Excepciones
„ %yylexthrow{ excepción , … %} define excepciones
lanzadas por la función yylex()

Javier Vélez Reyes [email protected]

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 [email protected]

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 [email protected]

Directivas JLex
„ Definiciones de estados
„ %state nombre, nombre,… define estados
„ Deben estar contenidos en una línea
„ Puede hacer varias líneas definiendo estados
„ YYINITIAL es un estado definido por defecto

8
Javier Vélez Reyes [email protected]

Directivas JLex
„ Configuración
„ %ignorecase no diferencia entre mayúsculas y minúsculas
„ %char define la variable yychar para contar caracteres
„ %line define la variable yyline para indicar la línea
„ %notunix reconoce \r\n y \n como nueva línea
„ %full utiliza el código ASCII extendido 8 bits
„ %unicode utiliza codificación UNICODE de 16 bits

Javier Vélez Reyes [email protected]

Directivas JLex
„ Configuración
„ %class name define el nombre de la clase del scanner
„ %public define la clase del scanner como pública
„ %function name define el nombre de la función yylex()
„ %interface name la clase implementa el interface name
„ %type name define el tipo de retorno de yylex()
„ %integer establece el tipo de retorno de yylex() a int
„ %intwrap establece el tipo de retorno de yylex() a Integer
„ %yyeof define la constante Yylex.YYEOF
„ Debe estar presente la directiva %integer

„ Al encontrar EOF se devuelve Yylex.YYEOF

9
Javier Vélez Reyes [email protected]

Directivas JLex
„ Configuración
„ %cup configura JLex para integrarse con Cup
„ %implements java_cup.runtime.Scanner

„ %function next_Token

„ %type java_cup.runtime.Symbol

Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Tres partes
„ Estados léxicos
„ Expresión regular
„ Acciones java a ejecutar

10
Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Conflictos
„ Si más de una regla puede lanzarse ante una cadena
de entrada el analizador escoge la regla que se ajusta
a una cadena más larga
„ Ante igualdad de longitud el analizar escoge la regla
que se encuentre definida en primer lugar. Por tanto el
orden de ubicación de las reglas es importante
„ Si el analizador recibe una cadena que no se ajusta a
ningún patrón se produce un error. Por tanto todas las
entradas deben tener una regla. Para garantizar esto
existe el patrón comodín ‘.’ que se ajusta cualquier
patrón no definido antes

Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Estados
„ Una lista de estados puede preceder a cualquier regla
„ Existe un estado por defecto llamado YYINITIAL
„ Funcionamiento
„ El analizador esta en el estado A

„ Sólo se comprueban las reglas etiquetadas con A

„ Si no hay ajuste se produce un error

„ yybegin(estado) cambia de estado

11
Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Patrón
„ No pueden contener espacios en blanco puesto que
son interpretados como el final del patrón. Para
representar espacios en blanco deben entrecomillarse
„ Metacaracteres
? * + | ( ) ^
$ . “ \ [ ] { }

„ Composición
„ Concatenación ef
„ Opcionalidad e|f

Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Patrón
„ Secuencias de escape
„ \b retroceso
„ \n nueva línea
„ \t tabulador
„ \f avance página
„ \r retorno de carro
„ \ddd número octal
„ \xdd número hexadecimal
„ \udddd número hexadecimal de 4 dígitos
„ \^C carácter de control
„ \c backslash seguido del carácter c

12
Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Patrón
„ Otros metacaracteres y metaexpresiones
„ $ fin de fichero
„ . cualquier carácter menos \n (igual a [^\n])
„ “…” …
„ {name} expansión de una macro
„ * clausura de Kleene
„ + una o más repeticiones
„ ? Cero o una repetición
„ (…) agrupar expresiones regulares
„ […] conjunto de caracteres
„ {name} expansión de una macro
„ ^ niega los siguientes caracteres
„ a-b rango de caracteres desde a hasta b

Javier Vélez Reyes [email protected]

Reglas patrón-acción
„ Acciones
„ Consisten en bloques de código java
„ Si la acción no devuelve un valor se llama a yylex()
„ Una acción puede hacer recursión llamando a yylex()
„ La función yybegin(s) salta al estado s
„ En las acciones se suele consultar
„ yyline devuelve la línea
„ yychar devuelve el número del carácter
„ yytext() devuelve el lexema

13
Javier Vélez Reyes [email protected]

Bibliografía

[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios,


técnicas y herramientas,: Addison-Wesley
Iberoamericana, 1990

[GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez.


2002. Diseño de compiladores. Universidad de
Alicante.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA


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


[email protected]

14

También podría gustarte