从哪里开始手动从头开始构建CST?或者ANTLR4总是需要lex/parse过程作为我们的输入步骤吗
我的程序中有一些表示代码结构的视觉元素。
例如,正方形表示一个类,而嵌入该正方形中的圆表示一个方法。
现在我想把它们变成代码。如何在运行时使用ANTLR4(使用ANTLR4.js)实现这一点?大多数ANTLR示例似乎都依赖于词法分析和解析现有代码来获得语法树。因此:
input code->lex->parse->syntax tree->output code (1)
我想要
manually create syntax tree->output code (2)
(稍后,当用户向该类及其方法添加代码时,ANTLR将像在(1)
中一样使用。)
编辑也许我误解了这一点。我是否创建一些自定义数据结构,然后在上面运行解析器?即CCD_ 4?
IIUC,您可以直接使用StringTemplate。
作为后台,Antlr自己构建了一个内存中的解析树,然后遍历它,增量地调用StringTemplate来输出由相应的解析树节点数据限定的代码片段。Antlr使用内部解析树只是为了简化行走(因为Antlr是使用Antlr构建的)。
如果您有自己的数据结构,无论其具体实现如何,都要按程序处理它,以逐步调用ST模板来发出相应的代码。而且,如果Antlr使用的模板符合您的要求,您可以直接使用它们(JavaScript.stg)。
当然,如果您的数据结构具有可以lex’d/解析为标准Antlr解析树的特性,那么您就可以使用标准的Antlr访问者来调用和填充特定于节点的模板。