字句解析:curLexState

PARSER_BEGIN(Test)

public class Test {
  public static void main(String args[]) throws ParseException {
    Test parser = new Test(System.in);
    parser.Input();
  }
}

PARSER_END(Test)

SKIP :
{
    <SPACE:  " " | "\t" | "\n" | "\r">
}

TOKEN :
{
    <A: "a"> { System.out.print("curLexState: ");
               System.out.println(curLexState); }
}

MORE :
{
    <B: "b"> { System.out.print("curLexState: ");
               System.out.println(curLexState); } : S1
}

<S1> MORE :
{
    <C: "c"> { System.out.print("curLexState: ");
               System.out.println(curLexState); }
}

<S1> TOKEN :
{
    <D: "d"> { System.out.print("curLexState: ");
               System.out.println(curLexState); } : S2
}

<S2> TOKEN :
{
    <E: "e"> { System.out.print("curLexState: ");
               System.out.println(curLexState); } : DEFAULT
}

void Input() :
{ Token t; }
{
    ((t = <A> | t = <D> | t = <E> ))+ <EOF>
}

で、

abcde
curLexState: 0
curLexState: 0
curLexState: 1
curLexState: 1
curLexState: 2