Merge pull request #16 from sharwell/parrt_master

Fix listener name BlankJavaListener->JavaBaseListener
This commit is contained in:
Terence Parr 2012-02-16 16:12:52 -08:00
commit 66e7e0fad2
3 changed files with 32 additions and 6 deletions

View File

@ -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);

View File

@ -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" +

View File

@ -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);