JavaCC: cómo manejar tokens que contienen palabras comunes

Estoy tratando de crear un analizador de código fuente como este:

[code table 1.0]
code table code_table_name
    id = 500
    desc = "my code table one"
end code table

... y aquí abajo está la gramática que definí:

PARSER_BEGIN(CodeTableParser)
...
PARSER_END(CodeTableParser)

/* skip spaces */
SKIP: {
         " "
    |    "\t"
    |    "\r"
    |    "\n"
}

/* reserved words */
TOKEN [IGNORE_CASE]: {
        <CODE_TAB_HEADER:     "[code table 1.0]">
    |   <CODE_TAB_END:        "end" (" ")+ <CODE_TAB_BEGIN>>
    |   <CODE_TAB_BEGIN:      <IDENT> | "code" (" ")+ "table">
    |   <ID:                  "id">
    |   <DESC:                "desc">
}

/* token images */
TOKEN: {
        <NUMBER:  (<DIGIT>)+>
    |   <IDENT:   (<ALPHA>)+>
    |   <VALUE:   (<ALPHA> ["[", "]"])+>
    |   <STRING:  <QUOTED>>
}

TOKEN: {
        <#ALPHA:  ["A"-"Z", "a"-"z", "0"-"9", "$", "_", "."]>
    |   <#DIGIT:  ["0"-"9"]>
    |   <#QUOTED: "\"" (~["\""])* "\"">
}

void parse():
{
}
{
    expression() <EOF>
}

void expression():
{
    Token tCodeTab;
}
{
    <CODE_TAB_HEADER>
    <CODE_TAB_BEGIN>
    tCodeTab = <IDENT>
    (
        <ID>
        <DESC>
    )*
    <CODE_TAB_END>
}

El problema es que el analizador identifica correctamente el token ("tabla de códigos") ... pero no identifica el token IDENT ("code_table_name") ya que contiene las palabras ya contenidas en el token CODE_TAB_BEGIN (es decir, "código"). El analizador se queja diciendo que "el código va seguido de un carácter no válido _" ...

Dicho esto, me pregunto qué me estoy perdiendo para permitir que el analizador funcione correctamente. Soy un novato y cualquier ayuda sería muy apreciada ;-)

Gracias j3d

Respuesta 1

Digamos que tengo un método que toma un parámetro y devuelve un Mono <Integer> que se completa de forma asíncrona. Por ejemplo: Aleatorio aleatorio = nuevo Aleatorio (); ScheduledExecutorService ...

Tengo una aplicación web que estaba intentando implementar en un servidor remoto de Windows 2003 con java6, tomcat6 y mysql5.5. Después de implementar la aplicación cuando llego a la url de la aplicación, me sigue ...

Contexto que intenta recuperar RetrieveAttributeChangeHistory de la entidad de auditoría de Dynamics 365. Necesito ayuda para formar la sintaxis adecuada para la función OData en esta entidad. Como la función no está consolidada, soy ...

Estoy creando mi primer programa de chat (con gráficos en Java) y estoy usando el generador de escenas JavaFx para crear una GUI que contiene algunas imágenes y luego 1 a 2 hombres que pueden chatear entre ellos. el ...