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.