summaryrefslogtreecommitdiff
path: root/tool/src/org/antlr/v4/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'tool/src/org/antlr/v4/analysis')
-rw-r--r--tool/src/org/antlr/v4/analysis/AnalysisPipeline.java2
-rw-r--r--tool/src/org/antlr/v4/analysis/LeftRecursiveRuleAnalyzer.java17
-rw-r--r--tool/src/org/antlr/v4/analysis/LeftRecursiveRuleTransformer.java9
3 files changed, 13 insertions, 15 deletions
diff --git a/tool/src/org/antlr/v4/analysis/AnalysisPipeline.java b/tool/src/org/antlr/v4/analysis/AnalysisPipeline.java
index 5bd84be..a04ec31 100644
--- a/tool/src/org/antlr/v4/analysis/AnalysisPipeline.java
+++ b/tool/src/org/antlr/v4/analysis/AnalysisPipeline.java
@@ -100,7 +100,7 @@ public class AnalysisPipeline {
}
}
- /** Return whether lookahead sets are disjoint; no lookahead => not disjoint */
+ /** Return whether lookahead sets are disjoint; no lookahead ⇒ not disjoint */
public static boolean disjoint(IntervalSet[] altLook) {
boolean collision = false;
IntervalSet combined = new IntervalSet();
diff --git a/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleAnalyzer.java b/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleAnalyzer.java
index 5b6ba05..7a1d233 100644
--- a/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleAnalyzer.java
+++ b/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleAnalyzer.java
@@ -68,8 +68,7 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
public LinkedHashMap<Integer, LeftRecursiveRuleAltInfo> binaryAlts = new LinkedHashMap<Integer, LeftRecursiveRuleAltInfo>();
public LinkedHashMap<Integer, LeftRecursiveRuleAltInfo> ternaryAlts = new LinkedHashMap<Integer, LeftRecursiveRuleAltInfo>();
public LinkedHashMap<Integer, LeftRecursiveRuleAltInfo> suffixAlts = new LinkedHashMap<Integer, LeftRecursiveRuleAltInfo>();
- public List<LeftRecursiveRuleAltInfo> prefixAlts = new ArrayList<LeftRecursiveRuleAltInfo>();
- public List<LeftRecursiveRuleAltInfo> otherAlts = new ArrayList<LeftRecursiveRuleAltInfo>();
+ public List<LeftRecursiveRuleAltInfo> prefixAndOtherAlts = new ArrayList<LeftRecursiveRuleAltInfo>();
/** Pointer to ID node of ^(= ID element) */
public List<Pair<GrammarAST,String>> leftRecursiveRuleRefLabels =
@@ -188,7 +187,7 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
LeftRecursiveRuleAltInfo a =
new LeftRecursiveRuleAltInfo(alt, altText, null, altLabel, false, originalAltTree);
a.nextPrec = nextPrec;
- prefixAlts.add(a);
+ prefixAndOtherAlts.add(a);
//System.out.println("prefixAlt " + alt + ": " + altText + ", rewrite=" + rewriteText);
}
@@ -222,7 +221,9 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
String altLabel = altTree.altLabel!=null ? altTree.altLabel.getText() : null;
LeftRecursiveRuleAltInfo a =
new LeftRecursiveRuleAltInfo(alt, altText, null, altLabel, false, originalAltTree);
- otherAlts.add(a);
+ // We keep other alts with prefix alts since they are all added to the start of the generated rule, and
+ // we want to retain any prior ordering between them
+ prefixAndOtherAlts.add(a);
// System.out.println("otherAlt " + alt + ": " + altText);
}
@@ -254,8 +255,7 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
ruleST.add("opAlts", altST);
}
- ruleST.add("primaryAlts", prefixAlts);
- ruleST.add("primaryAlts", otherAlts);
+ ruleST.add("primaryAlts", prefixAndOtherAlts);
tool.log("left-recursion", ruleST.render());
@@ -330,7 +330,7 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
return lrlabel;
}
- /** Strip last 2 tokens if -> label; alter indexes in altAST */
+ /** Strip last 2 tokens if → label; alter indexes in altAST */
public void stripAltLabel(GrammarAST altAST) {
int start = altAST.getTokenStartIndex();
int stop = altAST.getTokenStopIndex();
@@ -439,8 +439,7 @@ public class LeftRecursiveRuleAnalyzer extends LeftRecursiveRuleWalker {
"binaryAlts=" + binaryAlts +
", ternaryAlts=" + ternaryAlts +
", suffixAlts=" + suffixAlts +
- ", prefixAlts=" + prefixAlts +
- ", otherAlts=" + otherAlts +
+ ", prefixAndOtherAlts=" +prefixAndOtherAlts+
'}';
}
}
diff --git a/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleTransformer.java b/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleTransformer.java
index ea67493..45cb517 100644
--- a/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleTransformer.java
+++ b/tool/src/org/antlr/v4/analysis/LeftRecursiveRuleTransformer.java
@@ -168,8 +168,7 @@ public class LeftRecursiveRuleTransformer {
// track recursive alt info for codegen
r.recPrimaryAlts = new ArrayList<LeftRecursiveRuleAltInfo>();
- r.recPrimaryAlts.addAll(leftRecursiveRuleWalker.prefixAlts);
- r.recPrimaryAlts.addAll(leftRecursiveRuleWalker.otherAlts);
+ r.recPrimaryAlts.addAll(leftRecursiveRuleWalker.prefixAndOtherAlts);
if (r.recPrimaryAlts.isEmpty()) {
tool.errMgr.grammarError(ErrorType.NO_NON_LR_ALTS, g.fileName, ((GrammarAST)r.ast.getChild(0)).getToken(), r.name);
}
@@ -244,9 +243,9 @@ public class LeftRecursiveRuleTransformer {
* (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}? '--'))))))
+ * (ALT {7 &gt;= $_p}? '*' (= b e) {$v = $a.v * $b.v;})
+ * (ALT {6 &gt;= $_p}? '+' (= b e) {$v = $a.v + $b.v;})
+ * (ALT {3 &gt;= $_p}? '++') (ALT {2 &gt;= $_p}? '--'))))))
* </pre>
*/
public void setAltASTPointers(LeftRecursiveRule r, RuleAST t) {