我们的DMS Software Reengineering Toolkit旨在做到这一点,就像做任何类型的自动化软件再造项目所必需的那样。
DMS 允许定义语法,类似于 ANTLR(和其他解析器生成器)样式。与 ANTLR(和其他解析器生成器)不同,DMS 使用 GLR 解析器,这意味着您不必弯曲语言语法规则来满足解析器生成器的要求。如果您可以编写上下文无关语法,DMS 会将其转换为该语言的解析器。这意味着实际上您可以比使用典型的 LL 或 L(AL)R 解析器生成器更快地获得有效的、正确的语法。
与 ANTLR(和其他解析器生成器)不同,构建 AST 不需要额外的工作;它是自动构建的。这意味着您花费零时间编写树构建规则而无需调试它们。
DMS 还提供了一种漂亮的打印规范语言,指定文本框垂直、水平或缩进堆叠,您可以在其中定义用于将 AST 转换回完全合法、格式良好的源文本的“格式”。众所周知的解析器生成器在这里都没有提供任何帮助。如果你想漂亮地打印树,你需要做大量的自定义编码。有关这方面的更多详细信息,请参阅我对Compiling an AST back to source 的SO 回答。这意味着您可以在一个(紧张的)下午为您的语法构建一个漂亮的打印机,只需使用框布局指令注释语法规则。
DMS 的词法分析器非常小心地捕捉注释和“词法格式”(那个数字是八进制的吗?那个字符串有什么样的引号?转义字符?)以便它们可以正确地重新生成。Parse-to-AST 然后 prettyprint-AST-to-text 往返将任意丑陋的代码转换为遵循漂亮打印规则的格式化代码。(这个往返是赌注:如果你想走得更远,要实际操纵 AST,你仍然希望能够重新生成有效的源文本)。
我们最近为 EGL 构建了解析器/漂亮打印机。这花了大约一周的时间。当然,我们是我们工具的专家。
您可以从我们的网站下载使用 DMS 构建的多种不同格式化程序中的任何一种,以查看此类格式化可以做什么。
编辑 2012 年 7 月:上周(5 天)使用 DMS,我们(我个人)从头开始构建了一个完全符合 IEC61131-3“结构化文本”(工业控制语言,类似 Pascal)的解析器和漂亮打印机。(它处理标准文档中的所有示例)。