Ejemplo n.º 1
0
  @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());
      }
    }
  }
Ejemplo n.º 3
0
 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());
 }
Ejemplo n.º 4
0
  /**
   * 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;
  }
Ejemplo n.º 5
0
  @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);
 }
Ejemplo n.º 7
0
 @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);
 }
Ejemplo n.º 8
0
 @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);
 }
Ejemplo n.º 9
0
 @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");
  }
Ejemplo n.º 11
0
  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();
  }
Ejemplo n.º 13
0
 @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);
 }
Ejemplo n.º 14
0
 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);
 }
Ejemplo n.º 18
0
  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());
    }
  }
Ejemplo n.º 19
0
 @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);
 }
Ejemplo n.º 24
0
 @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);
 }
Ejemplo n.º 27
0
 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();
 }
Ejemplo n.º 28
0
 @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);
 }
Ejemplo n.º 29
0
 @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);
 }
Ejemplo n.º 30
0
  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;
  }