LOOKAHEAD、文字列と条件式の併用

PARSER_BEGIN(Test)

import java.io.*;

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">
    | <B: "b">
    | <C: "c">
    | <D: "d">
}

void Input() :
{}
{
    (  LOOKAHEAD("a" "b", {getToken(3).kind == C}) abc()
     |                                             abd())+
}

void abc() :
{}
{
    <A> <B> <C> { System.out.println("*ABC*"); }
}

void abd() :
{}
{
    <A> <B> <D> { System.out.println("*ABD*"); }
}

で、

abc
*ABC*
abd
*ABD*