,如标题中所述,我的任务是穿越 java> java >的代码生成的解析树(grammar是标准的Java语法),打印大多数不变并仅修改某些单词,例如键入声明。
我当前的方法是创建ParseTreeListener
并在enterEveryRule
方法中实现逻辑,但不幸的是,它甚至对于基本打印似乎也没有用。输出非常混乱,并且有很多重复,好像每个节点都被多次访问。
我的另一种尝试是在BaseListener
中实现适当的方法,以对我需要的类型声明进行更改,但是从那里我发现没有可能打印其余代码不变的可能性。
期待您的帮助!
您可以使用antlr的字符串模板从ASTS生成代码。
通常,您从可以再生与基础树相对应的源代码的"标准"字符串模板开始。
要获得所需的效果,您明智地选择了不需要更改的AST节点上的标准字符串模板,以及您想要更改的变体模板。
IMHO,最好修改AST,然后只需应用标准模板。