В настоящее время можно перевести код C# в абстрактное дерево синтаксиса?
Да, тривиальным в особых условиях (= с помощью нового Expressions framework):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Это создает дерево выражения для лямбда, то есть функция, принимающая в int
и возвращающегося двойной. Вы можете изменить дерево выражений, используя структуру выражений (= классы из в этом пространстве имен), а затем скомпилировать его во время выполнения:
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.
Интересно, как ур пытается перевести код C# на АСТ? – yeeen
Я отложил проект. –
Долгосрочная удержание ... Lol –