从Source到AST再到CodeDom

时间:2010-06-03 09:54:51

标签: parsing compiler-construction codedom abstract-syntax-tree

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

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

问题:

1)这样的工具的逻辑步骤是:解析并构建 textual 树并匹配符号表,然后将其转换为CodeDom?

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

1 个答案:

答案 0 :(得分:0)

您可以构建自己的解析器,您自己的树构建器,您自己的树步行器,您自己的分析器,您自己的漂亮打印机......但它需要做很多工作。

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

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

给定语法,DMS将解析并自动构建树;是的,它会自动捕获注释等“microtokens”并将它们附加到适当的树节点。它可以在转换之前或之后将树重新打印出来。您必须为符号表提供支持,因为这是一个语义,而不是语法结构,但DMS提供通用符号表和范围管理工具作为构建的库。 DMS还提供完整的控制和数据流分析库,如果您想进行严格的代码转换或重构,则需要这些库。

DMS最好的属性之一是能够使用语法的语法应用转换,例如,“如果你看到 this (用我的语言),那么用替换< / EM>”。

您可以看到an example of defining lexer, parser, prettyprinter and transformation rules that define 9th grade algebra and a bit of calculus.重写 规则用于在代数公式上进行简化和计算符号导数。