forked from jasder/antlr
added ctx stack test
[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9110]
This commit is contained in:
parent
c99ce6d26e
commit
1efa316de9
|
@ -30,9 +30,7 @@ package org.antlr.v4.runtime;
|
||||||
|
|
||||||
import com.sun.istack.internal.Nullable;
|
import com.sun.istack.internal.Nullable;
|
||||||
import org.antlr.v4.runtime.atn.ATNConfig;
|
import org.antlr.v4.runtime.atn.ATNConfig;
|
||||||
import org.antlr.v4.runtime.atn.ATNState;
|
|
||||||
import org.antlr.v4.runtime.atn.ParserATNSimulator;
|
import org.antlr.v4.runtime.atn.ParserATNSimulator;
|
||||||
import org.antlr.v4.runtime.atn.RuleTransition;
|
|
||||||
import org.antlr.v4.runtime.misc.IntervalSet;
|
import org.antlr.v4.runtime.misc.IntervalSet;
|
||||||
import org.antlr.v4.runtime.misc.OrderedHashSet;
|
import org.antlr.v4.runtime.misc.OrderedHashSet;
|
||||||
|
|
||||||
|
@ -242,11 +240,9 @@ public abstract class BaseRecognizer extends Recognizer<ParserATNSimulator> {
|
||||||
String[] ruleNames = getRuleNames();
|
String[] ruleNames = getRuleNames();
|
||||||
List<String> stack = new ArrayList<String>();
|
List<String> stack = new ArrayList<String>();
|
||||||
RuleContext p = _ctx;
|
RuleContext p = _ctx;
|
||||||
while ( p!=null && p.invokingState>=0 ) {
|
while ( p!=null ) {
|
||||||
// compute what follows who invoked us
|
// compute what follows who invoked us
|
||||||
ATNState invokingState = _interp.atn.states.get(p.invokingState);
|
stack.add(ruleNames[p.getRuleIndex()]);
|
||||||
RuleTransition rt = (RuleTransition)invokingState.transition(0);
|
|
||||||
stack.add(ruleNames[rt.ruleIndex]);
|
|
||||||
p = p.parent;
|
p = p.parent;
|
||||||
}
|
}
|
||||||
return stack;
|
return stack;
|
||||||
|
|
|
@ -3,16 +3,16 @@ package org.antlr.v4.test;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class TestParseTrees extends BaseTest {
|
public class TestParseTrees extends BaseTest {
|
||||||
@Test public void testToken() throws Exception {
|
@Test public void testTokenAndRuleContextString() throws Exception {
|
||||||
String grammar =
|
String grammar =
|
||||||
"grammar T;\n" +
|
"grammar T;\n" +
|
||||||
"s\n" +
|
"s\n" +
|
||||||
"@init {setBuildParseTrees(true);}\n" +
|
"@init {setBuildParseTrees(true);}\n" +
|
||||||
"@after {System.out.println($r.toStringTree(this));}\n" +
|
"@after {System.out.println($r.toStringTree(this));}\n" +
|
||||||
" :r=a ;\n" +
|
" :r=a ;\n" +
|
||||||
"a : 'x' ;\n";
|
"a : 'x' {System.out.println(getRuleInvocationStack());} ;\n";
|
||||||
String result = execParser("T.g", grammar, "TParser", "TLexer", "s", "x", false);
|
String result = execParser("T.g", grammar, "TParser", "TLexer", "s", "x", false);
|
||||||
String expecting = "(a x)\n";
|
String expecting = "[a, s]\n(a x)\n";
|
||||||
assertEquals(expecting, result);
|
assertEquals(expecting, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue