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*