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. |