Class LeftRecursiveRuleAnalyzer


  • public class LeftRecursiveRuleAnalyzer
    extends LeftRecursiveRuleWalker
    Using a tree walker on the rules, determine if a rule is directly left-recursive and if it follows our pattern.
    • Field Detail

      • tool

        public Tool tool
      • ruleName

        public java.lang.String ruleName
      • leftRecursiveRuleRefLabels

        public java.util.List<Pair<GrammarAST,​java.lang.String>> leftRecursiveRuleRefLabels
        Pointer to ID node of ^(= ID element)
      • tokenStream

        public final org.antlr.runtime.TokenStream tokenStream
        Tokens from which rule AST comes from
      • recRuleTemplates

        public static final org.stringtemplate.v4.STGroup recRuleTemplates
      • codegenTemplates

        public final org.stringtemplate.v4.STGroup codegenTemplates
      • language

        public final java.lang.String language
    • Constructor Detail

      • LeftRecursiveRuleAnalyzer

        public LeftRecursiveRuleAnalyzer​(GrammarAST ruleAST,
                                         Tool tool,
                                         java.lang.String ruleName,
                                         java.lang.String language)
    • Method Detail

      • getArtificialOpPrecRule

        public java.lang.String getArtificialOpPrecRule()
      • addPrecedenceArgToRules

        public AltAST addPrecedenceArgToRules​(AltAST t,
                                              int prec)
      • hasImmediateRecursiveRuleRefs

        public static boolean hasImmediateRecursiveRuleRefs​(GrammarAST t,
                                                            java.lang.String ruleName)
        Match (RULE RULE_REF (BLOCK (ALT .*) (ALT RULE_REF[self] .*) (ALT .*))) Match (RULE RULE_REF (BLOCK (ALT .*) (ALT (ASSIGN ID RULE_REF[self]) .*) (ALT .*)))
      • stripAltLabel

        public void stripAltLabel​(GrammarAST altAST)
        Strip last 2 tokens if → label; alter indexes in altAST
      • text

        public java.lang.String text​(GrammarAST t)
      • precedence

        public int precedence​(int alt)
      • nextPrecedence

        public int nextPrecedence​(int alt)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object