forked from jasder/antlr
all rule indexes are 0-based now; 0..n-1 not 1..n
[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 8667]
This commit is contained in:
parent
1530234c29
commit
da633613a7
|
@ -44,8 +44,6 @@ public class ATN {
|
|||
public ATN(Grammar g) {
|
||||
this.g = g;
|
||||
if ( g.isLexer() ) {
|
||||
ruleToTokenType.add(0); // no rule index 0
|
||||
ruleToActionIndex.add(0); // no action index 0
|
||||
for (Rule r : g.rules.values()) {
|
||||
ruleToTokenType.add(g.getTokenType(r.name));
|
||||
if ( r.actionIndex>0 ) ruleToActionIndex.add(r.actionIndex);
|
||||
|
|
|
@ -42,8 +42,6 @@ public abstract class ATNInterpreter {
|
|||
int s = toInt(data[p++]);
|
||||
ATNState startState = atn.states.get(s);
|
||||
atn.rules.add(startState);
|
||||
if ( atn.ruleToTokenType.size()==0 ) atn.ruleToTokenType.add(0); // we're indexed from 1
|
||||
if ( atn.ruleToActionIndex.size()==0 ) atn.ruleToActionIndex.add(0); // we're indexed from 1
|
||||
if ( atn.grammarType==ANTLRParser.LEXER ) {
|
||||
int tokenType = toInt(data[p++]);
|
||||
atn.ruleToTokenType.add(tokenType);
|
||||
|
@ -106,7 +104,7 @@ public abstract class ATNInterpreter {
|
|||
switch (type) {
|
||||
case Transition.EPSILON : return new EpsilonTransition(target);
|
||||
case Transition.RANGE : return new RangeTransition(arg1, arg2, target);
|
||||
case Transition.RULE : return new RuleTransition(arg1, atn.states.get(arg1), target);
|
||||
case Transition.RULE : return new RuleTransition(arg2, atn.states.get(arg1), target);
|
||||
case Transition.PREDICATE : return new PredicateTransition(target, arg1, arg2);
|
||||
case Transition.ATOM : return new AtomTransition(arg1, target);
|
||||
case Transition.ACTION : return new ActionTransition(target, arg1, arg2);
|
||||
|
|
|
@ -56,12 +56,12 @@ public class ATNSerializer {
|
|||
}
|
||||
int nrules = atn.rules.size();
|
||||
data.add(nrules);
|
||||
for (int r=1; r<=nrules; r++) {
|
||||
ATNState ruleStartState = atn.rules.get(r-1);
|
||||
for (int r=0; r<nrules; r++) {
|
||||
ATNState ruleStartState = atn.rules.get(r);
|
||||
data.add(ruleStartState.stateNumber);
|
||||
if ( atn.g.isLexer() ) {
|
||||
data.add(atn.ruleToTokenType.get(r));
|
||||
String ruleName = atn.g.rules.getKey(r-1);
|
||||
String ruleName = atn.g.rules.getKey(r);
|
||||
Rule rule = atn.g.getRule(ruleName);
|
||||
data.add(rule.actionIndex);
|
||||
}
|
||||
|
|
|
@ -190,9 +190,8 @@ public class ParserATNFactory implements ATNFactory {
|
|||
}
|
||||
|
||||
/** Build what amounts to an epsilon transition with an action.
|
||||
* The action goes into ATN though it is ignored during analysis.
|
||||
* It slows things down a bit, but I must ignore predicates after
|
||||
* having seen an action (5-5-2008).
|
||||
* The action goes into ATN though it is ignored during prediction
|
||||
* if actionIndex < 0. Only forced are executed during prediction.
|
||||
*/
|
||||
public Handle action(ActionAST action) {
|
||||
//System.out.println("action: "+action);
|
||||
|
|
|
@ -53,7 +53,7 @@ public class Grammar implements AttributeResolver {
|
|||
* not include lexical rules if combined.
|
||||
*/
|
||||
public OrderedHashMap<String, Rule> rules = new OrderedHashMap<String, Rule>();
|
||||
int ruleNumber = 1;
|
||||
int ruleNumber = 0; // used to get rule indexes (0..n-1)
|
||||
|
||||
/** The ATN that represents the grammar with edges labelled with tokens
|
||||
* or epsilon. It is more suitable to analysis than an AST representation.
|
||||
|
|
|
@ -77,7 +77,7 @@ public class Rule implements AttributeResolver {
|
|||
|
||||
public Alternative[] alt;
|
||||
|
||||
/** All rules have unique index 1..n */
|
||||
/** All rules have unique index 0..n-1 */
|
||||
public int index;
|
||||
|
||||
public int actionIndex; // if lexer
|
||||
|
|
|
@ -12,13 +12,13 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : A B ;");
|
||||
String expecting =
|
||||
"max type 4\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->2 EPSILON 0,0\n" +
|
||||
"1->6 ATOM -1,0\n" +
|
||||
|
@ -38,11 +38,11 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : ~A ;");
|
||||
String expecting =
|
||||
"max type 5\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->2 EPSILON 0,0\n" +
|
||||
"1->4 ATOM -1,0\n" +
|
||||
|
@ -60,11 +60,11 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : . ;");
|
||||
String expecting =
|
||||
"max type 5\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->2 EPSILON 0,0\n" +
|
||||
"1->4 ATOM -1,0\n" +
|
||||
|
@ -81,17 +81,17 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : A | A B ;");
|
||||
String expecting =
|
||||
"max type 4\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BLOCK_START 1\n" +
|
||||
"9:BLOCK_END 1\n" +
|
||||
"10:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 0\n" +
|
||||
"7:BASIC 0\n" +
|
||||
"8:BLOCK_START 0\n" +
|
||||
"9:BLOCK_END 0\n" +
|
||||
"10:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->8 EPSILON 0,0\n" +
|
||||
"1->10 ATOM -1,0\n" +
|
||||
|
@ -116,23 +116,23 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : A | A B | A B C ;");
|
||||
String expecting =
|
||||
"max type 5\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"9:BASIC 1\n" +
|
||||
"10:BASIC 1\n" +
|
||||
"11:BASIC 1\n" +
|
||||
"12:BASIC 1\n" +
|
||||
"13:BASIC 1\n" +
|
||||
"14:BLOCK_START 1\n" +
|
||||
"15:BLOCK_END 1\n" +
|
||||
"16:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 0\n" +
|
||||
"7:BASIC 0\n" +
|
||||
"8:BASIC 0\n" +
|
||||
"9:BASIC 0\n" +
|
||||
"10:BASIC 0\n" +
|
||||
"11:BASIC 0\n" +
|
||||
"12:BASIC 0\n" +
|
||||
"13:BASIC 0\n" +
|
||||
"14:BLOCK_START 0\n" +
|
||||
"15:BLOCK_END 0\n" +
|
||||
"16:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->14 EPSILON 0,0\n" +
|
||||
"1->16 ATOM -1,0\n" +
|
||||
|
@ -164,17 +164,17 @@ public class TestATNSerialization extends BaseTest {
|
|||
"a : A+ B ;");
|
||||
String expecting =
|
||||
"max type 4\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:BASIC 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:PLUS_BLOCK_START 1\n" +
|
||||
"5:BLOCK_END 1\n" +
|
||||
"6:PLUS_LOOP_BACK 1\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"9:BASIC 1\n" +
|
||||
"10:BASIC 1\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:BASIC 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:PLUS_BLOCK_START 0\n" +
|
||||
"5:BLOCK_END 0\n" +
|
||||
"6:PLUS_LOOP_BACK 0\n" +
|
||||
"7:BASIC 0\n" +
|
||||
"8:BASIC 0\n" +
|
||||
"9:BASIC 0\n" +
|
||||
"10:BASIC 0\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"0->4 EPSILON 0,0\n" +
|
||||
"1->10 ATOM -1,0\n" +
|
||||
|
@ -202,22 +202,22 @@ public class TestATNSerialization extends BaseTest {
|
|||
"e : E ;\n");
|
||||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:RULE_START 1\n" +
|
||||
"1:RULE_STOP 1\n" +
|
||||
"2:RULE_START 2\n" +
|
||||
"3:RULE_STOP 2\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 2\n" +
|
||||
"7:BASIC 2\n" +
|
||||
"8:BASIC 2\n" +
|
||||
"0:RULE_START 0\n" +
|
||||
"1:RULE_STOP 0\n" +
|
||||
"2:RULE_START 1\n" +
|
||||
"3:RULE_STOP 1\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"rule 1:0 0,0\n" +
|
||||
"rule 2:2 0,0\n" +
|
||||
"0->4 EPSILON 0,0\n" +
|
||||
"1->8 ATOM -1,0\n" +
|
||||
"2->6 EPSILON 0,0\n" +
|
||||
"3->5 EPSILON 0,0\n" +
|
||||
"4->5 RULE 2,2\n" +
|
||||
"4->5 RULE 2,1\n" +
|
||||
"5->1 EPSILON 0,0\n" +
|
||||
"6->7 ATOM 3,0\n" +
|
||||
"7->3 EPSILON 0,0\n";
|
||||
|
@ -234,14 +234,14 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 4\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:RULE_START 2\n" +
|
||||
"4:RULE_STOP 2\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"7:BASIC 2\n" +
|
||||
"8:BASIC 2\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:RULE_START 1\n" +
|
||||
"4:RULE_STOP 1\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 0\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"rule 2:3 4,0\n" +
|
||||
"mode 0:0\n" +
|
||||
|
@ -266,10 +266,10 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"mode 0:0\n" +
|
||||
"0->1 EPSILON 0,0\n" +
|
||||
|
@ -289,14 +289,14 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:PLUS_BLOCK_START 1\n" +
|
||||
"6:BLOCK_END 1\n" +
|
||||
"7:PLUS_LOOP_BACK 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:PLUS_BLOCK_START 0\n" +
|
||||
"6:BLOCK_END 0\n" +
|
||||
"7:PLUS_LOOP_BACK 0\n" +
|
||||
"8:BASIC 0\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"mode 0:0\n" +
|
||||
"0->1 EPSILON 0,0\n" +
|
||||
|
@ -326,20 +326,20 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 5\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:RULE_START 2\n" +
|
||||
"4:RULE_STOP 2\n" +
|
||||
"5:RULE_START 3\n" +
|
||||
"6:RULE_STOP 3\n" +
|
||||
"7:BASIC 1\n" +
|
||||
"8:BASIC 1\n" +
|
||||
"9:BASIC 1\n" +
|
||||
"10:BASIC 2\n" +
|
||||
"11:BASIC 2\n" +
|
||||
"12:BASIC 3\n" +
|
||||
"13:BASIC 3\n" +
|
||||
"14:BASIC 3\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:RULE_START 1\n" +
|
||||
"4:RULE_STOP 1\n" +
|
||||
"5:RULE_START 2\n" +
|
||||
"6:RULE_STOP 2\n" +
|
||||
"7:BASIC 0\n" +
|
||||
"8:BASIC 0\n" +
|
||||
"9:BASIC 0\n" +
|
||||
"10:BASIC 1\n" +
|
||||
"11:BASIC 1\n" +
|
||||
"12:BASIC 2\n" +
|
||||
"13:BASIC 2\n" +
|
||||
"14:BASIC 2\n" +
|
||||
"rule 1:1 3,1\n" +
|
||||
"rule 2:3 4,0\n" +
|
||||
"rule 3:5 5,2\n" +
|
||||
|
@ -371,10 +371,10 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"mode 0:0\n" +
|
||||
"0:'a'..'b'\n" +
|
||||
|
@ -395,10 +395,10 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"mode 0:0\n" +
|
||||
"0:'a'..'b', 'e'..'e', 'p'..'t'\n" +
|
||||
|
@ -419,12 +419,12 @@ public class TestATNSerialization extends BaseTest {
|
|||
String expecting =
|
||||
"max type 3\n" +
|
||||
"0:TOKEN_START 0\n" +
|
||||
"1:RULE_START 1\n" +
|
||||
"2:RULE_STOP 1\n" +
|
||||
"3:BASIC 1\n" +
|
||||
"4:BASIC 1\n" +
|
||||
"5:BASIC 1\n" +
|
||||
"6:BASIC 1\n" +
|
||||
"1:RULE_START 0\n" +
|
||||
"2:RULE_STOP 0\n" +
|
||||
"3:BASIC 0\n" +
|
||||
"4:BASIC 0\n" +
|
||||
"5:BASIC 0\n" +
|
||||
"6:BASIC 0\n" +
|
||||
"rule 1:1 3,0\n" +
|
||||
"mode 0:0\n" +
|
||||
"0:'a'..'b'\n" +
|
||||
|
@ -454,18 +454,18 @@ public class TestATNSerialization extends BaseTest {
|
|||
"0:TOKEN_START 0\n" +
|
||||
"1:TOKEN_START 0\n" +
|
||||
"2:TOKEN_START 0\n" +
|
||||
"3:RULE_START 1\n" +
|
||||
"4:RULE_STOP 1\n" +
|
||||
"5:RULE_START 2\n" +
|
||||
"6:RULE_STOP 2\n" +
|
||||
"7:RULE_START 3\n" +
|
||||
"8:RULE_STOP 3\n" +
|
||||
"9:BASIC 1\n" +
|
||||
"10:BASIC 1\n" +
|
||||
"11:BASIC 2\n" +
|
||||
"12:BASIC 2\n" +
|
||||
"13:BASIC 3\n" +
|
||||
"14:BASIC 3\n" +
|
||||
"3:RULE_START 0\n" +
|
||||
"4:RULE_STOP 0\n" +
|
||||
"5:RULE_START 1\n" +
|
||||
"6:RULE_STOP 1\n" +
|
||||
"7:RULE_START 2\n" +
|
||||
"8:RULE_STOP 2\n" +
|
||||
"9:BASIC 0\n" +
|
||||
"10:BASIC 0\n" +
|
||||
"11:BASIC 1\n" +
|
||||
"12:BASIC 1\n" +
|
||||
"13:BASIC 2\n" +
|
||||
"14:BASIC 2\n" +
|
||||
"rule 1:3 3,0\n" +
|
||||
"rule 2:5 4,0\n" +
|
||||
"rule 3:7 5,0\n" +
|
||||
|
|
Loading…
Reference in New Issue