Search in sources :

Example 81 with ST

use of edu.princeton.cs.algs4.ST in project antlr4 by tunnelvisionlabs.

the class Target method getElementListName.

public String getElementListName(String name) {
    ST st = getTemplates().getInstanceOf("ElementListName");
    st.add("elemName", getElementName(name));
    return st.render();
}
Also used : GrammarAST(org.antlr.v4.tool.ast.GrammarAST) ST(org.stringtemplate.v4.ST)

Example 82 with ST

use of edu.princeton.cs.algs4.ST in project antlr4 by tunnelvisionlabs.

the class BaseTest method writeTestFile.

protected void writeTestFile(String parserName, String lexerName, String parserStartRuleName, boolean debug, boolean profile) {
    ST outputFileST = new ST("import org.antlr.v4.runtime.*;\n" + "import org.antlr.v4.runtime.tree.*;\n" + "import org.antlr.v4.runtime.atn.*;\n" + "import java.io.File;\n" + "import java.util.Arrays;\n" + "\n" + "public class Test {\n" + "    public static void main(String[] args) throws Exception {\n" + "        CharStream input = CharStreams.fromFile(new File(args[0]));\n" + "        <lexerName> lex = new <lexerName>(input);\n" + "        CommonTokenStream tokens = new CommonTokenStream(lex);\n" + "        <createParser>\n" + "		 parser.setBuildParseTree(true);\n" + "		 parser.getInterpreter().reportAmbiguities = true;\n" + "		 <profile>\n" + "        ParserRuleContext tree = parser.<parserStartRuleName>();\n" + "		 <if(profile)>System.out.println(Arrays.toString(profiler.getDecisionInfo()));<endif>\n" + "        ParseTreeWalker.DEFAULT.walk(new TreeShapeListener(), tree);\n" + "    }\n" + "\n" + "	static class TreeShapeListener implements ParseTreeListener {\n" + "		@Override public void visitTerminal(TerminalNode node) { }\n" + "		@Override public void visitErrorNode(ErrorNode node) { }\n" + "		@Override public void exitEveryRule(ParserRuleContext ctx) { }\n" + "\n" + "		@Override\n" + "		public void enterEveryRule(ParserRuleContext ctx) {\n" + "			for (int i = 0; i \\< ctx.getChildCount(); i++) {\n" + "				ParseTree parent = ctx.getChild(i).getParent();\n" + "				if (!(parent instanceof RuleNode) || ((RuleNode)parent).getRuleContext() != ctx) {\n" + "					throw new IllegalStateException(\"Invalid parse tree shape detected.\");\n" + "				}\n" + "			}\n" + "		}\n" + "	}\n" + "}");
    ST createParserST = new ST("        <parserName> parser = new <parserName>(tokens);\n");
    if (debug) {
        createParserST = new ST("        <parserName> parser = new <parserName>(tokens);\n" + "        parser.addErrorListener(new DiagnosticErrorListener());\n");
    }
    if (profile) {
        outputFileST.add("profile", "ProfilingATNSimulator profiler = new ProfilingATNSimulator(parser);\n" + "parser.setInterpreter(profiler);");
    } else {
        outputFileST.add("profile", new ArrayList<Object>());
    }
    outputFileST.add("createParser", createParserST);
    outputFileST.add("parserName", parserName);
    outputFileST.add("lexerName", lexerName);
    outputFileST.add("parserStartRuleName", parserStartRuleName);
    writeFile(tmpdir, "Test.java", outputFileST.render());
}
Also used : ST(org.stringtemplate.v4.ST) JavaFileObject(javax.tools.JavaFileObject)

Example 83 with ST

use of edu.princeton.cs.algs4.ST in project antlr4 by tunnelvisionlabs.

the class BaseTest method writeLexerTestFile.

protected void writeLexerTestFile(String lexerName, boolean showDFA) {
    ST outputFileST = new ST("import java.io.File;\n" + "import org.antlr.v4.runtime.*;\n" + "\n" + "public class Test {\n" + "    public static void main(String[] args) throws Exception {\n" + "        CharStream input = CharStreams.fromFile(new File(args[0]));\n" + "        <lexerName> lex = new <lexerName>(input);\n" + "        CommonTokenStream tokens = new CommonTokenStream(lex);\n" + "        tokens.fill();\n" + "        for (Object t : tokens.getTokens()) System.out.println(t);\n" + (showDFA ? "System.out.print(lex.getInterpreter().getDFA(Lexer.DEFAULT_MODE).toLexerString());\n" : "") + "    }\n" + "}");
    outputFileST.add("lexerName", lexerName);
    writeFile(tmpdir, "Test.java", outputFileST.render());
}
Also used : ST(org.stringtemplate.v4.ST)

Example 84 with ST

use of edu.princeton.cs.algs4.ST in project antlr4 by tunnelvisionlabs.

the class TestAttributeChecks method testActions.

public void testActions(String location, String[] pairs, String template) {
    for (int i = 0; i < pairs.length; i += 2) {
        String action = pairs[i];
        String expected = pairs[i + 1];
        ST st = new ST(template);
        st.add(location, action);
        String grammar = st.render();
        testErrors(new String[] { grammar, expected }, false);
    }
}
Also used : ST(org.stringtemplate.v4.ST)

Example 85 with ST

use of edu.princeton.cs.algs4.ST in project antlr4 by tunnelvisionlabs.

the class TestBasicSemanticErrors method testArgumentRetvalLocalConflicts.

@Test
public void testArgumentRetvalLocalConflicts() throws Exception {
    String grammarTemplate = "grammar T;\n" + "ss<if(args)>[<args>]<endif> <if(retvals)>returns [<retvals>]<endif>\n" + "<if(locals)>locals [<locals>]<endif>\n" + "  : <body> EOF;\n" + "expr : '=';\n";
    String expected = "error(" + ErrorType.ARG_CONFLICTS_WITH_RULE.code + "): T.g4:2:7: parameter 'expr' conflicts with rule with same name\n" + "error(" + ErrorType.RETVAL_CONFLICTS_WITH_RULE.code + "): T.g4:2:26: return value 'expr' conflicts with rule with same name\n" + "error(" + ErrorType.LOCAL_CONFLICTS_WITH_RULE.code + "): T.g4:3:12: local 'expr' conflicts with rule with same name\n" + "error(" + ErrorType.RETVAL_CONFLICTS_WITH_ARG.code + "): T.g4:2:26: return value 'expr' conflicts with parameter with same name\n" + "error(" + ErrorType.LOCAL_CONFLICTS_WITH_ARG.code + "): T.g4:3:12: local 'expr' conflicts with parameter with same name\n" + "error(" + ErrorType.LOCAL_CONFLICTS_WITH_RETVAL.code + "): T.g4:3:12: local 'expr' conflicts with return value with same name\n" + "error(" + ErrorType.LABEL_CONFLICTS_WITH_RULE.code + "): T.g4:4:4: label 'expr' conflicts with rule with same name\n" + "error(" + ErrorType.LABEL_CONFLICTS_WITH_ARG.code + "): T.g4:4:4: label 'expr' conflicts with parameter with same name\n" + "error(" + ErrorType.LABEL_CONFLICTS_WITH_RETVAL.code + "): T.g4:4:4: label 'expr' conflicts with return value with same name\n" + "error(" + ErrorType.LABEL_CONFLICTS_WITH_LOCAL.code + "): T.g4:4:4: label 'expr' conflicts with local with same name\n";
    ST grammarST = new ST(grammarTemplate);
    grammarST.add("args", "int expr");
    grammarST.add("retvals", "int expr");
    grammarST.add("locals", "int expr");
    grammarST.add("body", "expr=expr");
    testErrors(new String[] { grammarST.render(), expected }, false);
}
Also used : ST(org.stringtemplate.v4.ST) Test(org.junit.Test)

Aggregations

ST (org.stringtemplate.v4.ST)197 GrammarAST (org.antlr.v4.tool.ast.GrammarAST)37 STGroup (org.stringtemplate.v4.STGroup)24 File (java.io.File)19 ArrayList (java.util.ArrayList)16 IOException (java.io.IOException)12 STGroupFile (org.stringtemplate.v4.STGroupFile)12 Path (java.nio.file.Path)10 Test (org.junit.Test)10 ATNFactory (org.antlr.v4.automata.ATNFactory)9 LexerATNFactory (org.antlr.v4.automata.LexerATNFactory)9 ParserATNFactory (org.antlr.v4.automata.ParserATNFactory)9 CodeGenerator (org.antlr.v4.codegen.CodeGenerator)9 SemanticPipeline (org.antlr.v4.semantics.SemanticPipeline)9 Grammar (org.antlr.v4.tool.Grammar)9 LexerGrammar (org.antlr.v4.tool.LexerGrammar)9 STGroupString (org.stringtemplate.v4.STGroupString)9 LinkedHashMap (java.util.LinkedHashMap)7 URL (java.net.URL)6 Map (java.util.Map)6