@Override public Handle lexerCallCommand(GrammarAST ID, GrammarAST arg) { LexerAction lexerAction = createLexerAction(ID, arg); if (lexerAction != null) { return action(ID, lexerAction); } // fall back to standard action generation for the command ST cmdST = codegenTemplates.getInstanceOf("Lexer" + CharSupport.capitalize(ID.getText()) + "Command"); if (cmdST == null) { g.tool.errMgr.grammarError( ErrorType.INVALID_LEXER_COMMAND, g.fileName, ID.token, ID.getText()); return epsilon(ID); } if (cmdST.impl.formalArguments == null || !cmdST.impl.formalArguments.containsKey("arg")) { g.tool.errMgr.grammarError( ErrorType.UNWANTED_LEXER_COMMAND_ARGUMENT, g.fileName, ID.token, ID.getText()); return epsilon(ID); } cmdST.add("arg", arg.getText()); cmdST.add("grammar", arg.g); return action(cmdST.render()); }
@Override public void exitSimpleStatement(pascalParser.SimpleStatementContext ctx) { List<ParseTree> values = ctx.children; ArrayList<String> valueNames = new ArrayList<String>(); for (int i = 0; i < ctx.getChild(0).getChildCount(); i += 5) valueNames.add(values.get(i).getText()); for (int j = 0; j < ctx.getChild(0).getChildCount(); j++) { if (ctx.getChild(0).getText().compareTo("Readln") == 0) { ST st = stg.getInstanceOf("ReadIn"); st.add("v", valueNames); System.out.println(st.render().trim()); } else if (ctx.getChild(0).getText().compareTo("Readkey") == 0) { ST st = stg.getInstanceOf("ReadIn"); st.add("v", valueNames); System.out.println(st.render().trim()); } else if (ctx.getChild(0).getChild(j).getText().compareTo("Num1") == 0) { ST st = stg.getInstanceOf("ReadIn"); st.add("v", valueNames); System.out.println(st.render().trim()); } else if (ctx.getChild(0).getChild(j).getText().compareTo("Num2") == 0) { ST st = stg.getInstanceOf("ReadIn"); st.add("v", valueNames); System.out.println(st.render().trim()); } else if (ctx.getChild(0).getChild(j).getText().compareTo("readln") == 0) { ST st = stg.getInstanceOf("ReadIn"); st.add("v", valueNames); System.out.println(st.render().trim()); } } }
protected void writeTestFile( String parserName, String lexerName, String parserStartRuleName, boolean debug) { ST outputFileST = new ST( "import org.antlr.v4.runtime.*;\n" + "import org.antlr.v4.runtime.tree.*;\n" + // "import org.antlr.v4.runtime.debug.*;\n" + "\n" + "public class Test {\n" + " public static void main(String[] args) throws Exception {\n" + " CharStream input = new ANTLRFileStream(args[0]);\n" + " <lexerName> lex = new <lexerName>(input);\n" + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + " <createParser>\n" + " parser.<parserStartRuleName>();\n" + " }\n" + "}"); ST createParserST = new ST( "class Profiler2 extends Profiler {\n" + " public void terminate() { ; }\n" + "}\n" + " Profiler2 profiler = new Profiler2();\n" + " <parserName> parser = new <parserName>(tokens,profiler);\n" + " profiler.setParser(parser);\n"); if (!debug) { createParserST = new ST(" <parserName> parser = new <parserName>(tokens);\n"); } outputFileST.add("createParser", createParserST); outputFileST.add("parserName", parserName); outputFileST.add("lexerName", lexerName); outputFileST.add("parserStartRuleName", parserStartRuleName); writeFile(tmpdir, "Test.java", outputFileST.render()); }
/** * Configure the given template with {@code model} and {@code dialectProperties} attributes. If * the model sets a dialect-specific {@code inspect} property to {@code true}, then {@link * ST#inspect()} will be called. */ protected ST forModel(ST template, Model model) { Set<String> attributeNames = template.getAttributes().keySet(); boolean inspect = false; if (attributeNames.contains(DIALECT_PROPERTIES_KEY)) { template.remove(DIALECT_PROPERTIES_KEY); Map<String, Map<String, String>> dialectProperties = model.getDialectProperties(); if (dialectProperties != null) { Map<String, String> properties = dialectProperties.get(getName()); if (properties != null) { template.add(DIALECT_PROPERTIES_KEY, properties); inspect = Boolean.parseBoolean(properties.get("inspect")); } } } if (attributeNames.contains(MODEL_KEY)) { template.remove(MODEL_KEY); template.add(MODEL_KEY, model); } if (inspect) { template.inspect(LINE_WIDTH); } return template; }
@Override public void render(PetriNet pn, Writer writer) throws RenderException, IOException { verifyNet(pn); STGroup group = new STGroupFile("uniol/apt/io/renderer/impl/BagginsPN.stg", '$', '$'); ST pnTemplate = group.getInstanceOf("pn"); pnTemplate.add("name", pn.getName()); // Handle places pnTemplate.add("places", pn.getPlaces()); List<Place> placeList = new ArrayList<>(pn.getPlaces()); // Handle transitions (and arcs) for (Transition t : pn.getTransitions()) { List<IdWeightPair> preset = new ArrayList<>(); List<IdWeightPair> postset = new ArrayList<>(); for (Flow e : t.getPresetEdges()) { preset.add(new IdWeightPair(placeList.indexOf(e.getSource()), -e.getWeight())); } for (Flow e : t.getPostsetEdges()) { postset.add(new IdWeightPair(placeList.indexOf(e.getTarget()), e.getWeight())); } pnTemplate.addAggr("transitions.{transition, preset, postset}", t, preset, postset); } pnTemplate.write(new AutoIndentWriter(writer), new ThrowingErrorListener()); }
public void add(MethodDecl decl) { if (addedDecls.contains(decl)) return; ST visit; if (visitorImpl) visit = tmplGroup.getInstanceOf("visit"); else visit = tmplGroup.getInstanceOf("declVisit"); for (Column c : decl.columns) { visit.add("columns", c); } if (decl.isLastColumn()) visit.add("outmost", true); visitorBase.add("methodDecls", visit); addedDecls.add(decl); }
@Test public void testLeaveNewlineOnEndInSubtemplates() throws Exception { STGroup group = new STGroup(); group.defineTemplate("test", "names", "<names:{n |\n" + "<n>\n" + "}>!"); ST st = group.getInstanceOf("test"); st.add("names", "Ter"); st.add("names", "Tom"); st.add("names", "Sumana"); String expected = "Ter" + newline + "Tom" + newline + "Sumana" + newline + "!"; String result = st.render(); assertEquals(expected, result); }
@Test public void testTrimmedSubtemplatesArgs() throws Exception { STGroup group = new STGroup(); group.defineTemplate("test", "names", "<names:{x| foo }>"); ST st = group.getInstanceOf("test"); st.add("names", "Ter"); st.add("names", "Tom"); st.add("names", "Sumana"); String expected = " foo foo foo "; String result = st.render(); assertEquals(expected, result); }
@Test public void testTrimJustOneWSInSubtemplates() throws Exception { STGroup group = new STGroup(); group.defineTemplate("test", "names", "<names:{n | <n> }>!"); ST st = group.getInstanceOf("test"); st.add("names", "Ter"); st.add("names", "Tom"); st.add("names", "Sumana"); String expected = " Ter Tom Sumana !"; String result = st.render(); assertEquals(expected, result); }
@Override public void enterIfStatement(pascalParser.IfStatementContext ctx) { String comp = ctx.getChild(1).getChild(1).getText(); if (comp.compareTo("=") == 0) comp = "=="; ST st = stg.getInstanceOf("ifClause"); st.add("operand1", ctx.getChild(1).getChild(0).getText()); st.add("comparator", comp); st.add("operand2", ctx.getChild(1).getChild(2).getText()); System.out.print(st.render().trim() + "\n"); }
private String buildSortStatementFromMultipleGroupByColumns( final BashSqlTable stmtTable, final List<ExprContext> groupByExpressions, final String delimiter) { int[] sortColumnNumbers = extractColumnNumbersFromGroupStmt(stmtTable, groupByExpressions); // build a sort statement ST template = new ST("<sort> -t $'<del>' <columns:{x | -k<x>,<x> }>"); template.add("sort", programConfig.sort()); template.add("del", delimiter); template.add("columns", sortColumnNumbers); return template.render(); }
public static String asString( String language, Activity activity, ObjectCombination objectCombination) { String template = (String) objectCombination.getTemplates().getAdditionalProperties().get(language); template = template.replace('{', '<'); template = template.replace('}', '>'); ST st = new ST(template); st.add("actor", displayName(activity.getActor())); st.add("provider", displayName(activity.getProvider())); st.add("object", displayName(activity.getObject())); st.add("target", displayName(activity.getTarget())); return st.render(); }
@Test public void testTabBeforeEndInSubtemplates() throws Exception { // fails since it counts indent from outer too STGroup group = new STGroup(); group.defineTemplate("test", "names", " <names:{n |\n" + " <n>\n" + " }>!"); ST st = group.getInstanceOf("test"); st.add("names", "Ter"); st.add("names", "Tom"); st.add("names", "Sumana"); String expected = " Ter" + newline + " Tom" + newline + " Sumana" + newline + "!"; String result = st.render(); st.impl.dump(); assertEquals(expected, result); }
protected void writeTemplateTestFile( String parserName, String lexerName, String parserStartRuleName, boolean debug) { ST outputFileST = new ST( "import org.antlr.v4.runtime.*;\n" + "import org.antlr.v4.stringtemplate.*;\n" + "import org.antlr.v4.stringtemplate.language.*;\n" + // "import org.antlr.v4.runtime.debug.*;\n" + "import java.io.*;\n" + "\n" + "public class Test {\n" + " static String templates =\n" + " \"group test;\"+" + " \"foo(x,y) ::= \\\"<x> <y>\\\"\";\n" + " static STGroup group =" + " new STGroup(new StringReader(templates)," + " AngleBracketTemplateLexer.class);" + " public static void main(String[] args) throws Exception {\n" + " CharStream input = new ANTLRFileStream(args[0]);\n" + " <lexerName> lex = new <lexerName>(input);\n" + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + " <createParser>\n" + " parser.setTemplateLib(group);\n" + " ParserRuleContext r = parser.<parserStartRuleName>();\n" + " if ( r.st!=null )\n" + " System.out.print(r.st.toString());\n" + " else\n" + " System.out.print(\"\");\n" + " }\n" + "}"); ST createParserST = new ST( "class Profiler2 extends Profiler {\n" + " public void terminate() { ; }\n" + "}\n" + " Profiler2 profiler = new Profiler2();\n" + " <parserName> parser = new <parserName>(tokens,profiler);\n" + " profiler.setParser(parser);\n"); if (!debug) { createParserST = new ST(" <parserName> parser = new <parserName>(tokens);\n"); } outputFileST.add("createParser", createParserST); outputFileST.add("parserName", parserName); outputFileST.add("lexerName", lexerName); outputFileST.add("parserStartRuleName", parserStartRuleName); writeFile(tmpdir, "Test.java", outputFileST.render()); }
@Override public void enterForStatement(pascalParser.ForStatementContext ctx) { String comp = ctx.getChild(3).getChild(1).getText(); if (comp.compareTo("TO") == 0) comp = "<="; String comp1 = ctx.getChild(2).getText(); if (comp1.compareTo(":=") == 0) comp1 = "="; ST st = stg.getInstanceOf("ForLoop"); st.add("operand1", ctx.getChild(1).getText()); st.add("comparator", comp); st.add("operand2", ctx.getChild(3).getChild(0).getText()); st.add("operand3", ctx.getChild(3).getChild(2).getText()); System.out.print(st.render().trim() + "\n"); }
@Test public void testDictDefaultValueIsKey() throws Exception { String templates = "typeInit ::= [\"int\":\"0\", default:key] " + newline + "var(type,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline; writeFile(tmpdir, "test.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "test.stg"); ST st = group.getInstanceOf("var"); st.add("type", "UserRecord"); st.add("name", "x"); String expecting = "UserRecord x = UserRecord;"; String result = st.render(); assertEquals(expecting, result); }
@Test public void testDict() throws Exception { String templates = "typeInit ::= [\"int\":\"0\", \"float\":\"0.0\"] " + newline + "var(type,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline; writeFile(tmpdir, "test.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "test.stg"); ST st = group.getInstanceOf("var"); st.add("type", "int"); st.add("name", "x"); String expecting = "int x = 0;"; String result = st.render(); assertEquals(expecting, result); }
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()); } }
@Override public ST codegen() { ST expr = CodeGen.expr(); String castExpr = "(" + type.getSimpleName() + ")" + codeStr(arg); expr.add("expr", castExpr); return expr; }
@Override public void enterProgramHeading(pascalParser.ProgramHeadingContext ctx) { programName = ctx.getChild(1).getText(); ST st = stg.getInstanceOf("enterProgram"); st.add("v", programName); System.out.println(st.render()); }
@Test public void testDictMissingDefaultValueIsEmptyForNullKey() throws Exception { String templates = "typeInit ::= [\"int\":\"0\", \"float\":\"0.0\"] " + newline + "var(type,w,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline; writeFile(tmpdir, "test.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "test.stg"); ST st = group.getInstanceOf("var"); st.add("w", "L"); st.add("type", null); // double not in typeInit map st.add("name", "x"); String expecting = " x = ;"; String result = st.render(); assertEquals(expecting, result); }
/** * Assign a value to an attributes' name. Please note, that you can call this method multiple * times for the same name to build lists of values. * * @param name The name of the attribute which shall be set. * @param value The value of the attribute which shall be set. */ public void setAttribute(String name, Object value) { try { template.add(name, value); } catch (IllegalArgumentException e) { throw new IllegalArgumentException( "No such attribute " + name + " in template " + getName(), e); } }
@Test public void testDictKeyLookupAsNonToStringableObject() throws Exception { // Make sure we try rendering stuff to string if not found as regular object String templates = "foo(m,k) ::= \"<m.(k)>\"" + newline; writeFile(tmpdir, "test.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "test.stg"); ST st = group.getInstanceOf("foo"); Map<HashableUser, String> m = new HashMap<HashableUser, String>(); m.put(new HashableUser(99, "parrt"), "first"); m.put(new HashableUser(172036, "tombu"), "second"); m.put(new HashableUser(391, "sriram"), "third"); st.add("m", m); st.add("k", new HashableUser(172036, "tombu")); String expecting = "second"; String result = st.render(); assertEquals(expecting, result); }
@Override public void appendContent() { ST st = ExecutionTool.group.getInstanceOf("XMLCapture"); st.add( "FileName", StringEscapeUtils.escapeJava( TestCaseDef.OutputFile + "\\" + ExecutionTool.testSuiteName + sheet.getSheetName() + ".csv")); st.add("XPaths", stringArrays); try { ExecutionTool.outputFile.write(st.render()); } catch (Exception e) { ExecutionTool.logError(e); } }
@Override public void enterAssignmentStatement(pascalParser.AssignmentStatementContext ctx) { ST st = stg.getInstanceOf("assignment"); st.add("ident", ctx.getChild(0).getText()); st.add("value", ctx.getChild(2).getText()); System.out.print(st.render().trim() + "\n"); }
@Test public void testDictKeyLookupViaTemplate() throws Exception { // Make sure we try rendering stuff to string if not found as regular object String templates = "typeInit ::= [\"int\":{0<w>}, \"float\":{0.0<w>}] " + newline + "var(type,w,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline; writeFile(tmpdir, "test.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "test.stg"); ST st = group.getInstanceOf("var"); st.add("w", "L"); st.add("type", new ST("int")); st.add("name", "x"); String expecting = "int x = 0L;"; String result = st.render(); assertEquals(expecting, result); }
public static String renderTemplate( String templateStr, Map<String, ? extends Object> templateValues) { ST template = new ST(templateStr, '$', '$'); if (templateValues != null) { for (String key : templateValues.keySet()) { template.add(key, templateValues.get(key)); } } return template.render(); }
@Test public void testNewlineNormalizationInAttribute() throws Exception { ST st = new ST("Foo\r\n" + "<name>\n"); st.add("name", "a\nb\r\nc"); StringWriter sw = new StringWriter(); st.write(new AutoIndentWriter(sw, "\n")); // force \n as newline String result = sw.toString(); String expecting = "Foo\na\nb\nc\n"; // expect \n in output assertEquals(expecting, result); }
@Test public void testElseIFOnMultipleLines2() throws Exception { ST t = new ST( "begin\n" + "<if(a)>\n" + "foo\n" + "<elseif(b)>\n" + "bar\n" + "<endif>\n" + "end\n"); t.add("b", true); String expecting = "begin" + newline + "bar" + newline + "end" + newline; String result = t.render(); assertEquals(expecting, result); }
public static String GetTemplate(Config config, String name, IRequestContext ctx) throws Exception { InputStream is = ctx.getServletContext().getResourceAsStream(String.format("%s%s", templatesPath, name)); ST template = new ST(StringUtils.getStreamContents(is), '$', '$'); template.add("cfg", config); String result = template.render(); return result; }