3

我正在阅读《语言实现模式》http://pragprog.com/book/tpdsl/language-implementation-patterns)一书,其中包括一些其他内容以澄清概念以及偶尔的网站。我正在尝试制作一个工具,它可以读取一种简单的编程语言并对其进行一些基本分析。

我陷入了这个工具的设计阶段。我构建了一个简单的手写递归体面解析器,它可以很好地验证源文件。但是,执行具有 CodeDom 树的源操作会很有用。

问题:

1) 像这样的工具是否需要执行逻辑步骤:解析并构建文本树和匹配符号表,然后将其转换为 CodeDom?

2)在构建文本树时,最方便的是 AST,更容易转换为 CodeDom .. 但是重构工具是否会在语句中维护所有嵌入标记的列表以保留内联注释以及它们如何跟踪在他们的树上?

4

1 回答 1

0

你可以构建你自己的解析器、你自己的树构建器、你自己的树行者、你自己的分析器、你自己的漂亮打印机……但它的工作量很大。

您可能会考虑为您提供所有这些机器的工具。

我们的DMS Software Reengineering Toolkit就是这样一种工具。

给定一个语法,DMS 会解析并自动构建一棵树;是的,它会自动捕获诸如评论之类的“微标记”并将它们附加到适当的树节点上。它可以在转换之前或之后将树漂亮地打印出来。您必须提供对符号表的支持,因为这是一种语义而非句法构造,但 DMS 提供了通用符号表和范围管理工具作为构建库的基础。DMS 还提供用于控制和数据流分析的完整库,如果您想要进行严格的代码转换或重构,则需要这些库。

DMS 最好的特性之一是能够应用使用语法语法声明的转换,例如,“如果你看到这个(用我的语言),然后用那个替换它”。

您可以看到一个定义 lexer、parser、prettyprinter 和转换规则的示例,这些规则定义了 9 年级代数和一些微积分。 重写规则用于对代数公式进行简化和计算符号导数。

于 2010-06-03T10:12:40.763 回答