这是目前可能的翻译C#代码成一个抽象的法树?

编辑:一些澄清;我不一定预期的编译器生成的AST-我分析器将被罚款,尽管我想用的东西"官员。" Lambda表达遗憾的是不要将充分给他们不让我用发言机构,而这正是我要找的。

有帮助吗?

解决方案

Roslyn 项目是在Visual Studio2010年和给你方案的访问 法树, 除其他事情。

SyntaxTree tree = SyntaxTree.ParseCompilationUnit(
    @" C# code here ");
var root = (CompilationUnitSyntax)tree.Root;

其他提示

这是目前可能的翻译C#代码成一个抽象的法树?

是的,平凡在特殊情况(=使用新的 表达的框架,):

// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;

这将创建一个表达树lambda,即一个功能把一个 int 和返回的一倍。你可以修改的表达树通过使用表情框架(=类在这namespace),然后汇编在运行时间:

var newBody = Expression.Add(f.Body, Expression.Constant(1));
f = Expression.Lambda<Func<int, int>>(newBody, f.Parameters);
var compiled = f.Compile();
Console.WriteLine(compiled(5)); // Result: 11

注意到所有的表情是不可改变的,所以他们都必须建立通过重新组合。在这种情况下,我的前面添加一个外1。

注意到这些表达的树木,只能工作的现实即表达式找到的内容在C#功能。你不能得到法的树木更高的结构,例如这类的方式。使用CodeDom框架。

检查。净 CodeDom 支持。有一个古老的条码的项目 C#CodeDOM分析器, 但它不会支持新的语言功能。

还应该支持在发展产生CodeDom树C#源码的根据的这个 发布.

有多强大的比R#项目。Nemerle.Peg:

https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/

它已C#解析其中的分析程序的所有C#码,并转给AST!

https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/csharp-parser/

你可以下载,安装在这里: https://code.google.com/p/nemerle/

就个人而言,我会使用 NRefactory, ,这是自由、公开来源和收益普及。

它看起来喜欢这种功能将包括与任何后来C#4,根据 安德斯*Hejlsberg的'未来的C#'PDC视频.

这些代码析生成器 有一个法C#3.0它涵盖了一切除了皇宫的语法。

我只是在回答另外一个线程,在这里计算器一个解决方案我在哪里实施了一个API 创建和操纵AST从C#源代码

奇怪的是,没有人建议黑客现有的单C#编译器。

我们 C#前端DMS 分析全C#3.0包括皇宫和生产Ast.DMS实际上是一个生态系统分析/改变源码的使用Ast为前端提供的语言.

编辑3/10/2010:...现在,处理全C#4.0

编辑:6/27/2014:处理C#5.0因为相当一段时间。

编辑:6/15/2016:处理C#6.0.看看 https://stackoverflow.com/a/37847714/120163 一样AST.

这些代码,是不是很有用的。皇宫不是你想要什么。

试图单。塞西尔! http://www.mono-project.com/Cecil

它是用于许多项目,包括NDepend! http://www.ndepend.com/

请参看R#项目(对不起的文件是在俄罗斯,但也有一些代码的例子)。它允许AST操作C#代码。

http://www.rsdn.ru/projects/rsharp/article/rsharp_mag.xml

项目的SVN是 在这里,:(URL更新,谢谢, derigel)

也请参看 Nemerle 语言。它是一个。净语言有强烈的支持元编程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top