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);
        }
Exemple #2
0
 public virtual IList <GrammarAST> GetNodesWithType(int ttype)
 {
     return(GetNodesWithType(IntervalSet.Of(ttype)));
 }