Package org.antlr.v4.analysis
Class LeftRecursiveRuleTransformer
- java.lang.Object
-
- org.antlr.v4.analysis.LeftRecursiveRuleTransformer
-
public class LeftRecursiveRuleTransformer extends Object
Remove left-recursive rule refs, add precedence args to recursive rule refs. Rewrite rule so we can create ATN. MODIFIES grammar AST in place.
-
-
Field Summary
Fields Modifier and Type Field Description GrammarRootAST
ast
Grammar
g
static String
PRECEDENCE_OPTION_NAME
Collection<Rule>
rules
static String
TOKENINDEX_OPTION_NAME
Tool
tool
-
Constructor Summary
Constructors Constructor Description LeftRecursiveRuleTransformer(GrammarRootAST ast, Collection<Rule> rules, Grammar g)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description RuleAST
parseArtificialRule(Grammar g, String ruleText)
void
setAltASTPointers(LeftRecursiveRule r, RuleAST t)
(RULE e int _p (returns int v) (BLOCK (ALT (BLOCK (ALT INT {$v = $INT.int;}) (ALT '(' (= x e) ')' {$v = $x.v;}) (ALT ID)) (* (BLOCK (OPTIONS ...) (ALT {7 >= $_p}? '*' (= b e) {$v = $a.v * $b.v;}) (ALT {6 >= $_p}? '+' (= b e) {$v = $a.v + $b.v;}) (ALT {3 >= $_p}? '++') (ALT {2 >= $_p}? '--'))))))boolean
translateLeftRecursiveRule(GrammarRootAST ast, LeftRecursiveRule r, String language)
Return true if successfulvoid
translateLeftRecursiveRules()
-
-
-
Field Detail
-
PRECEDENCE_OPTION_NAME
public static final String PRECEDENCE_OPTION_NAME
- See Also:
- Constant Field Values
-
TOKENINDEX_OPTION_NAME
public static final String TOKENINDEX_OPTION_NAME
- See Also:
- Constant Field Values
-
ast
public GrammarRootAST ast
-
rules
public Collection<Rule> rules
-
g
public Grammar g
-
tool
public Tool tool
-
-
Constructor Detail
-
LeftRecursiveRuleTransformer
public LeftRecursiveRuleTransformer(GrammarRootAST ast, Collection<Rule> rules, Grammar g)
-
-
Method Detail
-
translateLeftRecursiveRules
public void translateLeftRecursiveRules()
-
translateLeftRecursiveRule
public boolean translateLeftRecursiveRule(GrammarRootAST ast, LeftRecursiveRule r, String language)
Return true if successful
-
setAltASTPointers
public void setAltASTPointers(LeftRecursiveRule r, RuleAST t)
(RULE e int _p (returns int v) (BLOCK (ALT (BLOCK (ALT INT {$v = $INT.int;}) (ALT '(' (= x e) ')' {$v = $x.v;}) (ALT ID)) (* (BLOCK (OPTIONS ...) (ALT {7 >= $_p}? '*' (= b e) {$v = $a.v * $b.v;}) (ALT {6 >= $_p}? '+' (= b e) {$v = $a.v + $b.v;}) (ALT {3 >= $_p}? '++') (ALT {2 >= $_p}? '--'))))))
-
-