免责声明:上个月之前我从未使用过 Java,在此之前我也从未听说过 ANTLR 或 StringTemplate。在今年夏天的实习中,我得到了一个使用公司其他人从未使用过的工具的项目。每个人都“相信我”,我会“弄清楚”。因此,我的理解存在巨大差距。我喜欢这个项目,我学到了很多,所以不要把这当成抱怨。我只是想让它工作。
现在,我正在为旧的特定领域语言开发一个漂亮的打印机概念证明。我的 ANTLR 语法生成了很好的解析树,并且我能够输出简单的 StringTemplate 示例,就像介绍中的示例一样。
假设我的.stg
文件中有一个简单的模板:
module(type, name, content) ::= "<type> MODULE <name>; <content>; END MODULE."
在 Java 中,我可以用来add()
设置每个模板参数的值:
STGroup g = new STGroupFile("example.stg");
ST st = g.getInstanceOf("module");
st.add("type", "MAIN");
st.add("name", "test");
st.add("content", "abc");
System.out.println(st.render());
// prints "MAIN MODULE test; abc; END MODULE."
如何让 ANTLR 和 ST 读取文本文件并生成漂亮的打印输出?
MAIN MODULE test;
abc;
END MODULE.
应该成为
MAIN MODULE test; abc; END MODULE.
例如。(这不是我打算格式化所有输出的方式,别担心。它会打印得比这更漂亮。)
在这个答案中,我了解到 ANTLR 4 会自动生成步行者。假设我的 ANTLR 语法正确/写得很好,我如何将 ANTLR 规则/标记与我的模板参数匹配以从输入文本文件生成输出?
如果我在某处的文档中错过了它,请告诉我。ANTLR 4 和 ST 4 的示例比以前的版本少得多。