!7 abstract sclass Proposal { toString { ret sfu(this); } } static noToString record TwoSplit(LS a, LS b) extends Proposal {} static noToString record ThreeSplit(LS a, LS b, LS c) extends Proposal {} svoid parse(LS tok) { // drop first and last if (l(tok) >= 3) emit(new ThreeSplit(ll(first(tok)), dropFirstAndLast_noNewList(tok), ll(last(tok)))); for (int i = 1; i < l(tok)-1; i++) emit(new TwoSplit(subList(tok, 0, i), subList(tok, i))); } p-exp { LS tok = javaTokC("[(a|b), (c|d), (e|f)]"); parse(tok); }