public void testActions(String templates, String actionName, String action, String expected) throws org.antlr.runtime.RecognitionException { int lp = templates.indexOf('('); String name = templates.substring(0, lp); STGroup group = new STGroupString(templates); ST st = group.getInstanceOf(name); st.add(actionName, action); String grammar = st.render(); ErrorQueue equeue = new ErrorQueue(); Grammar g = new Grammar(grammar, equeue); if (g.ast != null && !g.ast.hasErrors) { SemanticPipeline sem = new SemanticPipeline(g); sem.process(); ATNFactory factory = new ParserATNFactory(g); if (g.isLexer()) factory = new LexerATNFactory((LexerGrammar) g); g.atn = factory.createATN(); CodeGenerator gen = new CodeGenerator(g); ST outputFileST = gen.generateParser(); String output = outputFileST.render(); // System.out.println(output); String b = "#" + actionName + "#"; int start = output.indexOf(b); String e = "#end-" + actionName + "#"; int end = output.indexOf(e); String snippet = output.substring(start + b.length(), end); assertEquals(expected, snippet); } if (equeue.size() > 0) { System.err.println(equeue.toString()); } }
protected void semanticProcess(Grammar g) { if (g.ast != null && !g.ast.hasErrors) { System.out.println(g.ast.toStringTree()); Tool antlr = new Tool(); SemanticPipeline sem = new SemanticPipeline(g); sem.process(); if (g.getImportedGrammars() != null) { // process imported grammars (if any) for (Grammar imp : g.getImportedGrammars()) { antlr.processNonCombinedGrammar(imp, false); } } } }
public List<String> getEvalInfoForString(String grammarString, String pattern) throws RecognitionException { ErrorQueue equeue = new ErrorQueue(); Grammar g = new Grammar(grammarString); List<String> evals = new ArrayList<String>(); if (g.ast != null && !g.ast.hasErrors) { SemanticPipeline sem = new SemanticPipeline(g); sem.process(); ATNFactory factory = new ParserATNFactory(g); if (g.isLexer()) factory = new LexerATNFactory((LexerGrammar) g); g.atn = factory.createATN(); CodeGenerator gen = new CodeGenerator(g); ST outputFileST = gen.generateParser(); // STViz viz = outputFileST.inspect(); // try { // viz.waitForClose(); // } // catch (Exception e) { // e.printStackTrace(); // } boolean debug = false; DebugInterpreter interp = new DebugInterpreter( outputFileST.groupThatCreatedThisInstance, outputFileST.impl.nativeGroup.errMgr, debug); InstanceScope scope = new InstanceScope(null, outputFileST); StringWriter sw = new StringWriter(); AutoIndentWriter out = new AutoIndentWriter(sw); interp.exec(out, scope); for (String e : interp.evals) { if (e.contains(pattern)) { evals.add(e); } } } if (equeue.size() > 0) { System.err.println(equeue.toString()); } return evals; }