答案 0 :(得分:1)
我们的DMS Software Reengineering Toolkit can do this with C# 2/3/4。 (2014年编辑:现在是C#5)
DMS为C#(以及Java和许多其他语言)提供了编译器准确的解析器。
它会自动构建完整的抽象语法树,无论它解析什么。每个AST节点都标有文件/行/列,代表该节点的开头, 最后一列可以通过DMS API调用计算。它将注释附加到树节点,因此它们不会丢失。 DMS还可以从AST或修改后的AST重新生成有效代码;这使它可以用于代码修改或生成。
它有一个内置选项,可以从AST生成XML,包括节点类型,源位置(如上所述)以及任何相关的文字值。命令行调用是:
run DMSDomainParser ++XML <path_to_your_file>
DMS本身提供了大量的基础设施来操纵它构建的AST: 遍历,模式匹配(针对基本上以源代码编码的模式),源到源转换。
它具有控制流,数据流,点到分析,C,COBOL和Java的全局调用图;这就是C#的全部。
对于操作此类代码,DMS被设计为比XML更好的 更好的解决方案。