【发布时间】:2010-10-23 19:58:36
【问题描述】:
我需要将 C# 代码转换为等效的 XML 表示。
我计划将 C# 代码(C# 2.0 代码 sn-ps,无泛型或可空类型)转换为 AST,然后将 AST 转换为 XML。
为 C# 寻找一个简单的词法分析器/解析器,它输出一个 AST。
任何关于将 C# 代码转换为 XML 表示(可以转换回 C#)的指针也将非常有帮助。
亲切的问候,
【问题讨论】:
我需要将 C# 代码转换为等效的 XML 表示。
我计划将 C# 代码(C# 2.0 代码 sn-ps,无泛型或可空类型)转换为 AST,然后将 AST 转换为 XML。
为 C# 寻找一个简单的词法分析器/解析器,它输出一个 AST。
任何关于将 C# 代码转换为 XML 表示(可以转换回 C#)的指针也将非常有帮助。
亲切的问候,
【问题讨论】:
【讨论】:
正如 Mitch 所说,Antlr 可以成为您的解决方案。您可以根据需要转换 Antlr 的 AST 输出,然后使用 xstream 对其进行序列化。这就是我在我的 bs 项目中使用的方法,如果有人知道更好的方法,那对我也很好。
您可以找到 csharp 语法示例,例如 http://www.antlr.org/grammar/1127720913326/tkCSharp.g 或 http://www.antlr.org/grammar/1151612545460/CSharpParser.g,但您可能需要根据 ANTLRV3 或您自己的需要对其进行调整。
【讨论】:
我们的DMS Software Reengineering Toolkit 是一个用于构建代码分析器和转换器的生态系统。 DMS 由语言定义参数化,并具有 C#、Java、C++、C、PL/SQL、PHP、JavaScript、COBOL 和各种其他语言的语言定义。当 DMS 根据语言定义进行解析时,它会自动构建一个 AST。 DMS 提供的 AST 库可以以类似 Lisp 的括号形式或 XML 格式打印树。 DMS 可以直接从 AST 重新生成源代码,而不是将 XML 转换回源代码。 DMS 还提供源到源的转换以允许对 AST 进行操作。
【讨论】: