JavaCUP - Análisis Léxico: Directivas JLex
Directivas de JLex
A continuación se presentan en una tabla, las diferentes opciones de personalización
del analizador léxico:
SINTAXIS | DENOMINACIÓN | EFECTO | RESULTADO | FUNCIÓN |
%{ <code> %} |
Código interno para la clase del Analizador Léxico | <code> es copiado en la clase del Analizador Léxico creada por JLex. | class Yylex { ... <code> ... } |
Permite declarar variables y funciones internas a la clase del Analizador Léxico |
%init{ <code> %init} |
Código de inicialización para la clase del Analizador Léxico | <code> es copiado en el cuerpo del constructor de la clase del Analizador Léxico creada por JLex. | class Yylex { Yylex () { ... <code> ... } } |
Permite inicializar la clase del analizador léxico, de una sola vez, desde su constructor. |
%initthrow{ <exc[1]> [,<exc[2]>, ...] %initthrow} |
Declaración de excepción de inicialización | El código Java especificado se copiará en la declaración del constructor del analizador léxico | Yylex () throws <exc[1]> [, <exc[2]>, ...] { ... <code> ... } |
Permite declarar una posible excepción causada por el código incluído en una directiva de inicialización. |
%eof{ <code> %eof} |
Código de End-of-File para la clase del Analizador Léxico | <code> es copiado en la declaración de la función del Analizador Léxico creada por JLex. | %eofthrow{ <exception[1]>[, <exception[2]>, ...] %eofthrow} |
Permite ejecutar <code>, cuando el analizador léxico reconoce el eof en su entrada. |
%eofthrow{ <exc[1]> [, <exc[2]>, ...] %eofthrow} |
Declaración de excepción de End-of-File | El código especificado será copiado en la declaración de la función del analizador léxico. | private void yy_do_eof () throws <exc[1]>[, <exc[2]>, ...] { ... <code> ... } |
Permite declarar una posible excepción causada por el código incluído en una directiva de eof. |
<name> = <definition> |
Definición de Macro | define una macro cuyo nombre es name | permite definir macros, que pueden contener otras macro expansiones; debe evitarse que los constructores de las mismas sean mutuamente recursivos. | |
%state state[0] [, state[1], state[2], ...] |
Declaración de Estados | agrega más estados a la especificación, además del estado por defecto YYINITIAL | permite difinir los estados léxicos que se utilizarán durante el análisis léxico | |
%char |
Contador de caracteres | activa el contador de caracteres, por defecto desactivado | almacena en al variable entera yycharel índice del primer caracter del token reconocido | |
%line |
Contador de líneas | activa el contador de líneas, por defecto desactivado | almacena en al variable entera yyline el índice de la primera línea del token reconocido | |
%class <name> |
Títulos de Componentes. class name. |
permite cambiar el nombre de la clase del analizador léxico, desde Yylex. | ||
%function <name> |
Títulos de Componentes. function name. |
permite cambiar el nombre de la función de yylex que reconoce los tokens | ||
%type <name> |
Títulos de Componentes. type name. |
permite cambiar el nombre del tipo de retorno de la función de Yytoken que reconoce los tokens | ||
%integer |
Tipo de los Tokens | Cambia el tipo de retorno de la función yylex, que por defecto es Yytoken, a int | class Yylex { ... public int yylex() {... } |
setea a la función de reconocimiento de tokens, para que su tipo de retorno sea int (32-bit). |
%intwrap |
Tipo de los Tokens | Cambia el tipo de retorno de la función yylex, que por defecto es Yytoken, a java.lang.Integer | class Yylex { ... public java.lang.Integer yylex () { ... } |
setea a la función de reconocimiento de tokens, para que su tipo de retorno sea Integer. |
%yyeof |
YYEOF en End-of-File | La directiva %integer implica %yyeof. | public final int YYEOF = -1; |
Declara la constante entera Yylex.YYEOF |
%notunix |
Compatibilidad de Sistemas Operativos y nuevas líneas | Asegura la independencia de plataforma Java. | Permite reconocer como fin de línea el retorno de carro(\r) o bien al nueva línea (\n) | |
%full |
Directiva de conjuntos de caracteres. Full |
JLex generará un analizador léxico que soporte códigos de caracteres entre 0 y 255 | Permite extender el alfabeto básico de 128 caracteres, a un alfabeto con valores de 8 bits. | |
%unicode |
Directiva de conjuntos de caracteres. Unicode. |
JLex generará un analizador léxico que soporte códigos de caracteres entre 0 y 2^16-1 | permite extender el alfabeto para incluir el alfabeto Unicode de 16 bits. | |
%ignorecase |
Directiva de conjuntos de caracteres. Ignorecase. |
CUP expandirá todas las clases de caracteres a unicode, para reconocer todos los tipos de letras | genera un analizador léxico que no distingue mayúsculas de minúsculas | |
%yylexthrow{ <exc[1]> [,<exc[2]>, ...] %yylexthrow} |
Excepciones generadas por acciones léxicas | El código Java especificado, se copia en la declaración de la función de reconocimiento de tokens Yylex.yylex() | public Yytoken yylex () throws <exc[1]> [,<exc[2]>, ...] { ... } |
Permite declarar una posible excepción causada por el código incluído en una procion de las reglas asociadas a expresiones regulares. |
%eofval{ <code> %eofval} |
Especificación del valor de retorno de EOF | Permite definir un trozo de código que se ejecute al reconocerse EOF. | ||
%implements <classname> |
Especificación de la interface a implementar | Yylex implementará classname |
class Yylex implements classname { ... |
Permite especificar una interface a implementar por Yylex. |
%public |
Publicación de la clase generada | La clase sólo es visible en el package actual. | Causa que la clase del analizador léxico creada por JLex sea pública. |