我在看书语言实现模式(http://pragprog.com/book/tpdsl/language-implementation-patterns)等几个混合澄清概念以及偶尔的网站。我正在尝试制作一个读取简单的编程语言并对其执行一些基本分析的工具。从源代码到AST到CodeDom
我陷入了这个工具的设计阶段。我已经构建了一个简单的手写递归裁剪器,可以很好地验证源文件。但是,执行具有CodeDom树的源代码操作将非常有用。
的问题:
1)是合乎逻辑的步骤,这样的工具需要:解析,并建立一个文本树和匹配的符号表,然后将其转换为一个CodeDom中?
2)在构建文本树时,最方便的是AST,更容易转换为CodeDom ..但重构工具是否在语句中维护了所有嵌入式令牌的列表,以保留内联注释以及他们是否在他们的树上跟踪这个?
谢谢你付出努力回答。我知道你的产品感谢谷歌以及其他一些类似的问题在StackOverflow的其他答案。但我并不是在寻找软件来为我做这一切;我期待学习这些工具如何工作并完成他们的事情。 – Jaapjan 2010-06-03 10:25:18
@Jaapjan:那么你需要的是一本编译器书,比如Aho/Ullman Dragon书。这将详细解释你需要解析和构建语法树。它不会做的是解释如何捕获注释,如何实现重写规则,或者如何构建漂亮的打印机。如果你搜索计算机科学文献,你可以找到关于这些主题的技术论文,但它到处散布。开始的关键之处在于专注于此任务的会议,如SCAM10,“源代码分析和操纵”。它*仍然*很多*的工作。 DMS是一个人世纪的博士级工作。 – 2010-06-03 10:36:32
是的。但我可以用堆栈和节点结构构建AST,将每个块和语句添加为节点。但问题是,实际上,如果这样的AST通常是一种纯粹的文本事件,它捕获语法结构,或者如果AST还包含空白,注释和可能内部对其他AST节点的引用(如超类引用)。即:通常是这些不同的树还是工具将它们结合起来? – Jaapjan 2010-06-03 11:05:12