ANTLR4 - 从非文件输入生成代码?

时间:2016-04-17 07:39:05

标签: antlr antlr4

我们从哪里开始从头开始手动构建CST?或者ANTLR4是否总是要求lex / parse过程作为我们的输入步骤?

我的程序中有一些代表代码结构的可视元素。

e.g。正方形表示一个类,而嵌入该正方形的圆表示一个方法。

现在我想把它们变成代码。如何在运行时使用ANTLR4执行此操作(使用ANTLR4.js)?大多数ANTLR示例似乎依赖于lexing和解析现有代码来获取语法树。所以而不是:

input code->lex->parse->syntax tree->output code (1)

我想要

manually create syntax tree->output code (2)

(稍后,当用户向该类及其方法添加代码时,ANTLR将在(1)中使用。)

编辑也许我误解了这一点。我是否创建了一些自定义数据结构,然后在其上运行解析器?即write structures to some in-memory format->parse->output code (3)

1 个答案:

答案 0 :(得分:3)

IIUC,您可以直接使用StringTemplate。

通过后台方式,Antlr本身构建一个内存中的解析树,然后遍历它,逐步调用StringTemplate输出由相应的解析树节点数据限定的代码片段。 Antlr使用内部解析树只是简化步行的便利(因为Antlr是使用Antlr构建的)。

如果您有自己的数据结构,无论其具体实现如何,请按程序处理它以逐步调用ST模板以发出相应的代码。并且,如果符合您的要求,您可以直接使用Antlr使用的相同模板(JavaScript.stg)。

当然,如果您的数据结构具有可以解释为标准Antlr解析树的性质,那么您可以使用标准的Antlr访问者来调用和填充特定于节点的模板。 / p>