@Before public void init() { Nonterminal X = Nonterminal.withName("X"); Nonterminal A = Nonterminal.withName("A"); Nonterminal B = Nonterminal.withName("B"); Nonterminal C = Nonterminal.withName("C"); Rule r1 = Rule.withHead(X) .addSymbol(Nonterminal.builder(A).setLabel("a").build()) .addSymbol( Star.builder( Sequence.builder( Code.code( Nonterminal.builder(B) .addPreCondition(predicate(equal(rExt("a"), lExt("b")))) .build(), stat(println(lExt("b")))), Code.code( Nonterminal.builder(C).setLabel("b").build(), stat(println(var("b"))))) .build()) .setLabel("b") .build()) .build(); Rule r2 = Rule.withHead(A).addSymbol(Terminal.from(Character.from('a'))).build(); Rule r3 = Rule.withHead(B).addSymbol(Terminal.from(Character.from('b'))).build(); Rule r4 = Rule.withHead(C).addSymbol(Terminal.from(Character.from('c'))).build(); grammar = Grammar.builder().addRules(r1, r2, r3, r4).build(); }