3

我在看书语言实现模式http://pragprog.com/book/tpdsl/language-implementation-patterns)等几个混合澄清概念以及偶尔的网站。我正在尝试制作一个读取简单的编程语言并对其执行一些基本分析的工具。从源代码到AST到CodeDom

我陷入了这个工具的设计阶段。我已经构建了一个简单的手写递归裁剪器,可以很好地验证源文件。但是,执行具有CodeDom树的源代码操作将非常有用。

的问题:

1)是合乎逻辑的步骤,这样的工具需要:解析,并建立一个文本树和匹配的符号表,然后将其转换为一个CodeDom中?

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

回答

0

你可以建立你自己的解析器,你自己的树建设者,你自己的树步行者,你自己的分析器,你自己的美丽的打印机......但它的工作很多。

您可能会考虑为您提供所有这些机械的工具。我们的DMS Software Reengineering Toolkit

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

一个DMS的最好性能是申请转换使用语法的语法,例如,“如果你看到这个(我的语言),然后通过取代它的​​是”规定的能力。

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

+2

谢谢你付出努力回答。我知道你的产品感谢谷歌以及其他一些类似的问题在StackOverflow的其他答案。但我并不是在寻找软件来为我做这一切;我期待学习这些工具如何工作并完成他们的事情。 – Jaapjan 2010-06-03 10:25:18

+0

@Jaapjan:那么你需要的是一本编译器书,比如Aho/Ullman Dragon书。这将详细解释你需要解析和构建语法树。它不会做的是解释如何捕获注释,如何实现重写规则,或者如何构建漂亮的打印机。如果你搜索计算机科学文献,你可以找到关于这些主题的技术论文,但它到处散布。开始的关键之处在于专注于此任务的会议,如SCAM10,“源代码分析和操纵”。它*仍然*很多*的工作。 DMS是一个人世纪的博士级工作。 – 2010-06-03 10:36:32

+0

是的。但我可以用堆栈和节点结构构建AST,将每个块和语句添加为节点。但问题是,实际上,如果这样的AST通常是一种纯粹的文本事件,它捕获语法结构,或者如果AST还包含空白,注释和可能内部对其他AST节点的引用(如超类引用)。即:通常是这些不同的树还是工具将它们结合起来? – Jaapjan 2010-06-03 11:05:12