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> | <B> <C>) ) abc() | abd())+ } void abc() : {} { <A> <B> <C> { System.out.println("*ABC*"); } | <B> <C> { System.out.println("*BC*"); } } void abd() : {} { <A> <D> { System.out.println("*AD*"); } }
で、
abc *ABC* bc *BC* ad *AD*
「(< A > < B > | < B > < C >)」は「< A > < B >」と「< B > < C >」のつもり