JavaCC - Análisis Léxico: Variables y métodos para acciones léxicas
Variables y métodos para utilizar en acciones léxicas
- StringBuffer image (READ/WRITE)
"image" (diferente del campo "image" de la clase Token) es una variable de tipo StringBuffer que contiene todos los caracteres que fueron reconocidos desde el último SKIP, TOKEN o SPECIAL_TOKEN. Pueden realizarse cambios, siempre que no se asigne null, dado que esta variable también es utilizada por el token manager generado. Si se realizan cambios, son pasados a los subsiguientes matches, si el match actual es MORE. El contenido de "image" no se asigna automáticamente al campo "image" del token reconocido. Para hacerlo automáticamente, debe asignarse explícitamente en una acción léxica de una expresión regular de tipo TOKEN o SPECIAL_TOKEN.
- int lengthOfMatch (READ ONLY)
Esta variable contiene la longitud del match actual (no es acumulativa
sobre las expresiones MORE). No es recomendable modificar el valor de esta
variable.
- int curLexState (READ ONLY):
Es el índice del estado léxico actual. Su valor no debería modificarse. Las constantes enteras cuyos nombres son aquellos del estado léxico son generados en el archivo <nombre_archivo>Constants, para poder referirse a los estados léxicos sin preocuparse acerca del valor actual de su índice.
- inputStream (READ ONLY):
Es una cadena de entrada del tipo apropiado (alguno de entre ASCII_CharStream, ASCII_UCodeESC_CharStream, UCode_CharStream, o UCode_UCodeESC_CharStream dependiendo de los valores de las opciones UNICODE_INPUT y JAVA_UNICODE_ESCAPE). Su valor no puede ser modificado. La cadena se encuentra actualmente en el último caracter consumido por este match. Los métodos de inputStream pueden ser invocados. Por ejemplo, getEndLine y get EndColumn pueden invocarse para obtener información acerca del número de línea y columna para el nuevo match.
- Token matchedToken (READ/WRITE):
Esta variable puede ser usada sólo en acciones asociadas con expresiones regulares TOKEN y SPECIAL_TOKEN. Constituye el token que será retornado al parser. Su valor puede cambiar, con lo cual el token retornado al parser será distinto del original. Aquí es donde puede asignarse el valor de la variable "image" a "matchedToken.image". Normalmente, los cambios producidos en "image" tienen efectos fuera de las acciones léxicas.
- void SwitchTo(int):
Mediante la invocación de este método se cambia al estado léxico especificado. Este método también puede ser invocado por las acciones del parser, además del uso normal que realizan las acciones léxicas. Sin embargo, se requiere cuidado en la utilización de este método para cambiar de estados desde el parser, ya que el análisis léxico podría estar adelantado varios tokens respecto del parser en la presencia de un lookahead extenso. Cuando se utiliza este método en acciones léxicas, debe asegurarse que es la última sentencia ejecutada en la acción, porque en otro caso, podrían acaecer sucesos inesperados. Si hay un cambio de estado especificado mediante el uso sintáctico de ": state", se hace caso omiso a todas las llamadas switchTo, y de allí en adelante no existen puntos con invocaciones switchTo en presencia explícita de un cambio de estado específico. En general, se debería recurrir a la invocación de este método cuando no queda otra opción, ya que usándolo se pierden algunos de los chequeos semánticos que JavaCC realiza cuando se utiliza la sintaxis standard.