public virtual Parser Parser(Parser p) { return p; }
/** Create RuleFunction per rule and update semantic predicates, actions of parser * output object with stuff found in r. */ public virtual void BuildRuleFunction(Parser parser, Rule r) { RuleFunction function = Rule(r); parser.funcs.Add(function); PushCurrentRule(function); function.FillNamedActions(@delegate, r); if (r is LeftRecursiveRule) { BuildLeftRecursiveRuleFunction((LeftRecursiveRule)r, (LeftRecursiveRuleFunction)function); } else { BuildNormalRuleFunction(r, function); } Grammar g = GetGrammar(); foreach (ActionAST a in r.actions) { if (a is PredAST) { PredAST p = (PredAST)a; RuleSempredFunction rsf; if (!parser.sempredFuncs.TryGetValue(r, out rsf) || rsf == null) { rsf = new RuleSempredFunction(@delegate, r, function.ctxType); parser.sempredFuncs[r] = rsf; } rsf.actions[g.sempreds[p]] = new Action(@delegate, p); } } PopCurrentRule(); }