public Pattern caseOther(Pattern p) {
   return builder.makeNotAllowed();
 }
 public Pattern caseAfter(AfterPattern p) {
   if (p.getOperand1().isNullable()) return p.getOperand2();
   else return builder.makeNotAllowed();
 }
 private Pattern memoApply(Pattern p) {
   return apply(builder.getPatternMemo(p)).getPattern();
 }
 public Pattern caseChoice(ChoicePattern p) {
   return builder.makeChoice(memoApply(p.getOperand1()), memoApply(p.getOperand2()));
 }