@Override
 public Expression visit(Optional optional) {
   Optional result = new Optional();
   if (optional.getExpr().getClass() == Choice.class) {
     String name = "opt" + Integer.toString(count);
     count++;
     Nonterminal nt = new Nonterminal(name);
     Expression exp = optional.getExpr().accept(this);
     newRules.put(nt, exp);
     result.setExpr(nt);
   } else {
     Expression exp = optional.getExpr().accept(this);
     result.setExpr(exp);
   }
   return result;
 }