使用ANTLR4设计灵活语言应用程序的通用策略 要求:
我正在尝试使用antlr4开发一个语言应用程序。所讨论的语言并不重要。重要的是语法非常广泛(轻松>2000条规则!!!)。我想做一些手术使用ANTLR4设计灵活语言应用程序的通用策略 要求:,antlr,dsl,antlr4,Antlr,Dsl,Antlr4,我正在尝试使用antlr4开发一个语言应用程序。所讨论的语言并不重要。重要的是语法非常广泛(轻松>2000条规则!!!)。我想做一些手术 提取大量信息。这些可以是调用图、变量名。常量表达式等 任意数量的转换: 如果一个循环可以展开,我们就继续展开它 如果我们能够消除死代码,我们可能会选择这样做 我们可以选择重命名所有变量名以符合某些规范 每个操作都可以相互独立地应用。在应用这些步骤之后,我希望重写输入尽可能接近原始输入 e、 因此,我们可能希望消除循环并重命名变量,然后以原始语言格式输出
- 提取大量信息。这些可以是调用图、变量名。常量表达式等
- 任意数量的转换:
- 如果一个循环可以展开,我们就继续展开它
- 如果我们能够消除死代码,我们可能会选择这样做
- 我们可以选择重命名所有变量名以符合某些规范李>
提前谢谢 一般来说,你想要的东西叫做a PTS通常有解析器,构建AST,可以预打印AST以恢复可编译的源文本。更重要的是,它们有标准的方法来导航/检查/修改AST,以便您可以通过编程方式对其进行更改 许多以模式匹配代码片段的形式提供这些功能,这些代码片段是以被转换语言的表面语法编写的;这避免了永远需要知道AST中哪些节点以及它们如何与子节点相关的极其详细的信息。这在处理大型复杂语法时非常有用,因为我们的大多数现代语言(和传统语言)似乎都有这样的功能
更复杂的PTS(很少)提供了额外的工具,用于梳理源代码的语义。在不知道单个符号所属的范围、类型以及许多其他细节(如数据流)的情况下,分析/转换大多数代码是非常困难的。完整披露:我构建了其中之一。ANTLR是一个解析器生成器,对树构建有一定的支持。这通常不足以支持做所有你想做的事情。“有没有类似的语言应用程序可以做同样的事情?”==>请参阅我的文章“解析后的生活”(通过谷歌或我的个人简历)。