【发布时间】:2015-07-23 16:26:11
【问题描述】:
免责声明:在上个月之前我从未使用过 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.
例如。 (这不是我打算格式化所有输出的方式,别担心。它会打印得比这更漂亮。)
在this answer 中,我了解到 ANTLR 4 会自动生成步行者。 假设我的 ANTLR 语法正确/编写良好,如何将 ANTLR 规则/标记与模板参数匹配以从输入文本文件生成输出?
如果我在某处的文档中遗漏了它,请告诉我。 ANTLR 4 和 ST 4 的示例比以前的版本少得多。
【问题讨论】:
标签: java antlr4 stringtemplate-4