当前位置:  开发笔记 > 编程语言 > 正文

将C#代码翻译成AST?

如何解决《将C#代码翻译成AST?》经验,为你挑选了3个好方法。

目前是否可以将C#代码转换为抽象语法树?

编辑:一些澄清; 我不一定希望编译器能为我生成AST - 解析器会很好,尽管我想使用"官方"的东西.遗憾的是Lambda表达式不够,因为它们不允许我使用语句体,这正是我正在寻找的.



1> Paul Rubel..:

该罗斯林项目是在Visual Studio 2010,让您的编程访问的语法树,等等.

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



2> Konrad Rudol..:

目前是否可以将C#代码转换为抽象语法树?

是的,在特殊情况下(=使用新的Expressions框架):

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

这为lambda创建了一个表达式树,即一个获取int并返回double 的函数.您可以使用表达式框架(=该命名空间中的类)修改表达式树,然后在运行时编译它:

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

请注意,所有表达式都是不可变的,因此必须通过组合重新构建它们.在这种情况下,我已经添加了1.

请注意,这些表达式树仅适用于真实表达式,即在C#函数中找到的内容.您无法通过这种方式获得更高结构(如类)的语法树.使用CodeDom框架.



3> Rob Walker..:

查看.NET CodeDom支持.有关C#CodeDOM解析器的代码项目的旧文章,但它不支持新的语言功能.

在#develop中也应该支持根据这个帖子从C#源代码生成CodeDom树.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有