Acciones Asociadas a las reglas léxicas
La acción asociada a una regla léxica consiste en código Java encerrado entre llaves, y es copiada tal y como está escrita, en el manejador de estados del analizador léxico producido por JLex.
Acciones y Recursión
Si en la acción no se retorna ningún valor, el analizador léxico permanecerá iterando, en la búsquea del siguiente match entre el stream de entrada y el valor de retorno asociado con dicho match.
El analizador léxico puede construirse para que realice recursión explícitamente con una llamada a yylex(), como en el siguiente fragmento:
{ ...
return yylex();
... }
Este fragmento de código provoca que el analizador léxico vuelva a hacer recursión, buscando el próximo match de la entradda y retornando el valor asociado con ese match. Sin embargo, el mismo efecto puede agregarse sin retornar de una acción dada. Esto resulta en la búsqueda del analizador para el siguiente match, sin el overhead adicional de la recursión.
El fragmento de código anterior, es un ejemplo de recursión a la cola, ya que la llamada recursiva está al final de la ejecución de la función invocante. El siguiente fragmento de código es un ejemplo de una llamada recursiva, que no es recursiva a la cola.
{ ...
next = yylex();
... }
Las acciones recursivas que no son recursivas a la cola, trabajan en la forma esperada, excepto la variables tales como yyline y yychar que pueden cambiar durante la recursión.
Valores Léxicos Disponibles
Dentro de la porción de acciones de las reglas léxicas pueden usarse algunos valores que son internos a la clase Yylex, y que son los siguientes:
Variable o Método | Directiva de Activación | Descripción |
java.lang.String yytext(); | siempre activa | porción reconocida del string de entrada |
int yychar; | %char | Indice del primer caracter de la porción reconocida del stream de entrada |
int yyline; | %line | Indice de la línea de comienzo de la porción reconocida del stream de entrada |