forked from jasder/antlr
Merge pull request #16 from sharwell/parrt_master
Fix listener name BlankJavaListener->JavaBaseListener
This commit is contained in:
commit
66e7e0fad2
|
@ -48,7 +48,7 @@ public class InvokeRule extends RuleElement implements LabeledOp {
|
||||||
|
|
||||||
@ModelElement public List<ActionChunk> argExprsChunks;
|
@ModelElement public List<ActionChunk> argExprsChunks;
|
||||||
|
|
||||||
public InvokeRule(OutputModelFactory factory, GrammarAST ast, GrammarAST labelAST) {
|
public InvokeRule(ParserFactory factory, GrammarAST ast, GrammarAST labelAST) {
|
||||||
super(factory, ast);
|
super(factory, ast);
|
||||||
if ( ast.atnState!=null ) {
|
if ( ast.atnState!=null ) {
|
||||||
RuleTransition ruleTrans = (RuleTransition)ast.atnState.transition(0);
|
RuleTransition ruleTrans = (RuleTransition)ast.atnState.transition(0);
|
||||||
|
@ -65,14 +65,17 @@ public class InvokeRule extends RuleElement implements LabeledOp {
|
||||||
if ( labelAST!=null ) {
|
if ( labelAST!=null ) {
|
||||||
// for x=r, define <rule-context-type> x and list_x
|
// for x=r, define <rule-context-type> x and list_x
|
||||||
String label = labelAST.getText();
|
String label = labelAST.getText();
|
||||||
RuleContextDecl d = new RuleContextDecl(factory,label,ctxName);
|
|
||||||
labels.add(d);
|
|
||||||
rf.addContextDecl(ast.getAltLabel(), d);
|
|
||||||
if ( labelAST.parent.getType() == ANTLRParser.PLUS_ASSIGN ) {
|
if ( labelAST.parent.getType() == ANTLRParser.PLUS_ASSIGN ) {
|
||||||
|
factory.defineImplicitLabel(ast, this);
|
||||||
String listLabel = gen.target.getListLabel(label);
|
String listLabel = gen.target.getListLabel(label);
|
||||||
RuleContextListDecl l = new RuleContextListDecl(factory, listLabel, ctxName);
|
RuleContextListDecl l = new RuleContextListDecl(factory, listLabel, ctxName);
|
||||||
rf.addContextDecl(ast.getAltLabel(), l);
|
rf.addContextDecl(ast.getAltLabel(), l);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
RuleContextDecl d = new RuleContextDecl(factory,label,ctxName);
|
||||||
|
labels.add(d);
|
||||||
|
rf.addContextDecl(ast.getAltLabel(), d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( ast.getChildCount()>0 ) {
|
if ( ast.getChildCount()>0 ) {
|
||||||
ActionAST arg = (ActionAST)ast.getChild(0);
|
ActionAST arg = (ActionAST)ast.getChild(0);
|
||||||
|
|
|
@ -34,6 +34,21 @@ import org.junit.Test;
|
||||||
* the remaining input to match.
|
* the remaining input to match.
|
||||||
*/
|
*/
|
||||||
public class TestParserExec extends BaseTest {
|
public class TestParserExec extends BaseTest {
|
||||||
|
@Test public void testLabels() throws Exception {
|
||||||
|
String grammar =
|
||||||
|
"grammar T;\n" +
|
||||||
|
"a : b1=b b2+=b*;\n" +
|
||||||
|
"b : id=ID val+=INT*;\n" +
|
||||||
|
"ID : 'a'..'z'+ ;\n" +
|
||||||
|
"INT : '0'..'9'+;\n" +
|
||||||
|
"WS : (' '|'\\n') {skip();} ;\n";
|
||||||
|
|
||||||
|
String found = execParser("T.g", grammar, "TParser", "TLexer", "a",
|
||||||
|
"abc 34", false);
|
||||||
|
assertEquals("", found);
|
||||||
|
assertEquals(null, stderrDuringParse);
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void testBasic() throws Exception {
|
@Test public void testBasic() throws Exception {
|
||||||
String grammar =
|
String grammar =
|
||||||
"grammar T;\n" +
|
"grammar T;\n" +
|
||||||
|
|
|
@ -44,7 +44,9 @@ import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.antlr.v4.runtime.atn.ATNConfig;
|
import org.antlr.v4.runtime.atn.ATNConfig;
|
||||||
|
@ -298,6 +300,8 @@ public class TestPerformance extends BaseTest {
|
||||||
|
|
||||||
if (SHOW_DFA_STATE_STATS) {
|
if (SHOW_DFA_STATE_STATS) {
|
||||||
int states = 0;
|
int states = 0;
|
||||||
|
int configs = 0;
|
||||||
|
Set<ATNConfig> uniqueConfigs = new HashSet<ATNConfig>();
|
||||||
|
|
||||||
for (int i = 0; i < decisionToDFA.length; i++) {
|
for (int i = 0; i < decisionToDFA.length; i++) {
|
||||||
DFA dfa = decisionToDFA[i];
|
DFA dfa = decisionToDFA[i];
|
||||||
|
@ -306,9 +310,13 @@ public class TestPerformance extends BaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
states += dfa.states.size();
|
states += dfa.states.size();
|
||||||
|
for (DFAState state : dfa.states.values()) {
|
||||||
|
configs += state.configset.size();
|
||||||
|
uniqueConfigs.addAll(state.configset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.format("There are %d DFAState instances.\n", states);
|
System.out.format("There are %d DFAState instances, %d configs (%d unique).\n", states, configs, uniqueConfigs.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
int localDfaCount = 0;
|
int localDfaCount = 0;
|
||||||
|
@ -418,7 +426,7 @@ public class TestPerformance extends BaseTest {
|
||||||
@SuppressWarnings({"unchecked"})
|
@SuppressWarnings({"unchecked"})
|
||||||
final Class<? extends Parser> parserClass = (Class<? extends Parser>)loader.loadClass("JavaParser");
|
final Class<? extends Parser> parserClass = (Class<? extends Parser>)loader.loadClass("JavaParser");
|
||||||
@SuppressWarnings({"unchecked"})
|
@SuppressWarnings({"unchecked"})
|
||||||
final Class<? extends ParseTreeListener<Token>> listenerClass = (Class<? extends ParseTreeListener<Token>>)loader.loadClass("BlankJavaListener");
|
final Class<? extends ParseTreeListener<Token>> listenerClass = (Class<? extends ParseTreeListener<Token>>)loader.loadClass("JavaBaseListener");
|
||||||
TestPerformance.sharedListener = listenerClass.newInstance();
|
TestPerformance.sharedListener = listenerClass.newInstance();
|
||||||
|
|
||||||
final Constructor<? extends Lexer> lexerCtor = lexerClass.getConstructor(CharStream.class);
|
final Constructor<? extends Lexer> lexerCtor = lexerClass.getConstructor(CharStream.class);
|
||||||
|
|
Loading…
Reference in New Issue