Eri*_*bes 15 c# compiler-construction abstract-syntax-tree
目前是否可以将C#代码转换为抽象语法树?
编辑:一些澄清; 我不一定希望编译器能为我生成AST - 解析器会很好,尽管我想使用"官方"的东西.遗憾的是Lambda表达式不够,因为它们不允许我使用语句体,这正是我正在寻找的.
Pau*_*bel 18
该罗斯林项目是在Visual Studio 2010,让您的编程访问的语法树,等等.
SyntaxTree tree = SyntaxTree.ParseCompilationUnit(
@" C# code here ");
var root = (CompilationUnitSyntax)tree.Root;
Run Code Online (Sandbox Code Playgroud)
Kon*_*lph 12
目前是否可以将C#代码转换为抽象语法树?
是的,在特殊情况下(=使用新的Expressions框架):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Run Code Online (Sandbox Code Playgroud)
这为lambda创建了一个表达式树,即一个获取int
并返回double 的函数.您可以使用表达式框架(=该命名空间中的类)修改表达式树,然后在运行时编译它:
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
Run Code Online (Sandbox Code Playgroud)
请注意,所有表达式都是不可变的,因此必须通过组合重新构建它们.在这种情况下,我已经添加了1.
请注意,这些表达式树仅适用于真实表达式,即在C#函数中找到的内容.您无法通过这种方式获得更高结构(如类)的语法树.使用CodeDom框架.
归档时间: |
|
查看次数: |
10451 次 |
最近记录: |