public virtual AltAST AddPrecedenceArgToRules(AltAST t, int prec) { if (t == null) { return(null); } // get all top-level rule refs from ALT IList <GrammarAST> outerAltRuleRefs = t.GetNodesWithTypePreorderDFS(IntervalSet.Of(RULE_REF)); foreach (GrammarAST x in outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; bool recursive = rref.Text.Equals(ruleName); bool rightmost = rref == outerAltRuleRefs[outerAltRuleRefs.Count - 1]; if (recursive && rightmost) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, "" + prec)); rref.SetOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return(t); }
public virtual IList <GrammarAST> GetNodesWithType(int ttype) { return(GetNodesWithType(IntervalSet.Of(ttype))); }