【问题标题】:Representing C#3 code as an Abstract Syntax Tree in XML将 C#3 代码表示为 XML 中的抽象语法树
【发布时间】:2020-07-31 00:20:21
【问题描述】:

我想知道 C#3 是否有类似于 GCC_XML 的东西;基本上是一种用 XML 表示程序的整个句法结构的方法。

创建表示后,我希望将其解析为 XDocument 并从那里解释或查询它。

有没有工具可以解决这个问题?

【问题讨论】:

  • 也许您可以序列化表达式树,但这对原始源代码没有帮助。这就是 Micrsoft 正在为 C# 5+ 考虑的东西
  • 是的,完全正确;我基本上喜欢有一个表达式树的逻辑限制(表示整个可执行程序的表达式树:语句、表达式、运算符、类型、方法、属性、属性等)我认为它会离那里有点远;所以我很乐意暂时使用 XML 作为中间体。

标签: .net xml c#-3.0 abstract-syntax-tree


【解决方案1】:

我们的DMS Software Reengineering Toolkit can do this with C# 2/3/4。 (2014 年编辑:现在是 C#5,2020 年编辑:现在 C#7 在 C#8 上工作)

DMS 为 C#(以及 Java 和许多其他语言)提供编译器准确的解析器。

它会自动为它解析的任何内容构建完整的抽象语法树。每个 AST 节点都标记有文件/行/列,用于表示该节点开始的令牌, 最后一列可以通过 DMS API 调用来计算。它将 cmets 附加到树节点,因此它们不会丢失。 DMS 还可以从 AST 或修改后的 AST 重新生成有效代码;这使其能够用于代码修改或生成。

它具有从 AST 生成 XML 的内置选项,包括节点类型、源位置(如上)和任何相关的文字值。命令行调用为:

 run DMSDomainParser ++XML  <path_to_your_file>

DMS 本身提供了大量的基础设施来操作它所构建的 AST: 遍历、模式匹配(针对基本上以源形式编码的模式)、源到源转换。

它具有C、COBOL和Java的控制流、数据流、指向分析、全局调用图;这就是 C# 的全部。

DMS 被设计为比 XML 更好的解决方案,用于处理此类代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2014-07-13
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多