如何遍历整个解析树并在 ANTLR4 中略有变化地打印它的内容?



,如标题中所述,我的任务是穿越 java> java >的代码生成的解析树(grammar是标准的Java语法),打印大多数不变并仅修改某些单词,例如键入声明。

我当前的方法是创建ParseTreeListener并在enterEveryRule方法中实现逻辑,但不幸的是,它甚至对于基本打印似乎也没有用。输出非常混乱,并且有很多重复,好像每个节点都被多次访问。

我的另一种尝试是在BaseListener中实现适当的方法,以对我需要的类型声明进行更改,但是从那里我发现没有可能打印其余代码不变的可能性。

期待您的帮助!

您可以使用antlr的字符串模板从ASTS生成代码。

通常,您从可以再生与基础树相对应的源代码的"标准"字符串模板开始。

要获得所需的效果,您明智地选择了不需要更改的AST节点上的标准字符串模板,以及您想要更改的变体模板。

IMHO,最好修改AST,然后只需应用标准模板。

最新更新