### Question:
GrammarSugar { public static NonTerminal seq(Symbol... symbols) { if (symbols.length == 0) { throw new IllegalArgumentException(); } Grammar g = symbols[0].getGrammar(); NonTerminal seq = g.newNonTerminal(g.uniqueName("seq_")); g.newRule(seq, symbols); return seq; }  static NonTerminal seq(Symbol... symbols); static NonTerminal optional(Symbol symbol); static NonTerminal plus(Symbol symbol); static NonTerminal star(Symbol symbol); static NonTerminal star(Symbol symbol, StarRulesUpdater updater); static NonTerminal oneOf(Symbol first, Symbol... symbols); static NonTerminal oneOf(OneOfRuleUpdater updater, Symbol first, Symbol... symbols); static NonTerminal separated(Symbol item, Symbol separator); static NonTerminal separated(Symbol item, Symbol separator, boolean atLeastOne); static NonTerminal terminated(Symbol item, Symbol separator); static NonTerminal terminated(Symbol item, Symbol separator, boolean trailingOptional); static NonTerminal terminated(Symbol item, Symbol separator, boolean trailingOptional, boolean emptyStart); static NonTerminal terminated(Symbol item, Symbol separator, Symbol terminator, boolean trailingOptional, boolean emptyStart);  }### Answer:
@Test public void sequence() { Grammar g = new Grammar(); Terminal id = g.newTerminal("id"); g.newRule(g.getStart(), seq(id, id)); LRParser parser = new LRParser(new SLRTableGenerator(g).generateTable()); assertEquals("[id, id]", "" + parser.parse(asLexemes(id, id))); assertFalse(parser.parse(id)); }