private Expr createMatchMethodAndCallFor(
     String symbol, Expr outerLookahead, NodeList<Expr> args) {
   if (!symbolToMatchNames.contains(symbol)) {
     symbolToMatchNames.add(symbol);
     GProduction production = productions.get(symbol);
     GExpansion symbolExpansion = production.expansion;
     return createMatchMethodAndCallFor(
         symbol,
         matchMethodName(symbol),
         symbolExpansion,
         outerLookahead,
         production.hintParams,
         args,
         MEMOIZE_MATCHES && (MEMOIZE_ALL_MATCHES || production.memoizeMatches));
   } else return matchMethodCall(matchMethodName(symbol), outerLookahead, args);
 }