我正在尝试使用antlr4开发语言应用程序。有问题的语言并不重要。重要的是语法非常广泛(容易> 2000规则!!! )。我想做一些操作
这些操作中的每一个都可以彼此独立地应用。在应用这些步骤之后,我希望尽可能接近原始输入重写输入。
e.g。所以我们可能想要消除循环并重命名变量,然后以原始语言格式输出结果。
欢迎任何输入。 提前致谢。
答案 0 :(得分:3)
通常,您想要的是Program Transformation System (PTS)。
PTS通常具有解析器,构建AST,可以将AST重新打印以恢复可编译的源文本。更重要的是,他们有标准的方法来导航/检查/修改AST,以便您可以以编程方式更改它们。
许多人以模式匹配代码片段的形式提供这些功能,这些代码片段是用被转换语言的表面语法编写的;这避免了永远不必知道关于AST中哪些节点以及它们与子节点相关的极其详细的细节。当您使用大型复杂语法时,这非常有用,因为我们的大多数现代语言(以及我们的遗留语言)似乎都有。
更复杂的PTS(极少数)提供额外的工具来梳理源代码的语义。分析/转换大多数代码非常困难,而不知道各个符号属于哪个范围,或者它们的类型,以及许多其他细节,如数据流。完全披露:我建立其中一个。