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();
}
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());
}
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());
}
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);
}
}
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);
}
Aggregations