字句解析:input_stream.get*()

SKIP 内では、matchedToken が使えないから、input_stream.get*() を使うらしい(使う機会は余りなさそうな気もするけど)

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">
        { System.out.println("*" + ":" +
                                   input_stream.getBeginLine() + ":" +
                                   input_stream.getEndLine() + ":" +
                                   input_stream.getBeginColumn() + ":" +
                                   input_stream.getEndColumn() + ":" +
                                   input_stream.GetImage() + "*");; }
}

TOKEN :
{
      <A: "a"> { System.out.println("*" + matchedToken.kind  + ":" +
                                          input_stream.getBeginLine() + ":" +
                                          input_stream.getEndLine() + ":" +
                                          input_stream.getBeginColumn() + ":" +
                                          input_stream.getEndColumn() + ":" +
                                          matchedToken.image + "*");; }
    | <B: "b"> { System.out.println("*" + matchedToken.kind  + ":" +
                                          matchedToken.beginLine + ":" +
                                          matchedToken.beginColumn + ":" +
                                          matchedToken.endLine + ":" +
                                          matchedToken.endColumn + ":" +
                                          matchedToken.image + "*");; }
}

void Input() :
{}
{
    ( <A> | <B> )+ <EOF>
}

で、

a
*2:1:1:1:1:a*
*:1:1:2:2:
*
a b
*2:2:2:1:1:a*
*:2:2:2:2: *
*3:2:3:2:3:b*
*:2:2:4:4:
*