Czy jest obecnie możliwe przetłumaczenie kodu C# na drzewo składni abstrakcyjnej?
Tak, trywialnie w szczególnych okolicznościach (= stosując nowy Expressions framework):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Stwarza to drzewa wyrażenie dla lambda, to znaczy funkcja bierze się int
i powracający podwójne. Można zmodyfikować drzewa wyrażenie za pomocą ramy wyrażenia (= klas od w tej przestrzeni nazw), a następnie skompilować go w czasie wykonywania:
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
Zauważ, że wszystkie wyrażenia są niezmienne więc muszą być budowane na nowo kompozycja. W tym przypadku dodałem 1.
Zauważ, że te drzewa wyrażeń działają tylko w przypadku wyrażeń rzeczywistych, czyli treści znalezionych w funkcji C#. Nie można uzyskać drzewek składni wyższych konstrukcji, takich jak klasy w ten sposób. Użyj do tego struktury CodeDom.
Zastanawiasz się, w jaki sposób próbuje się przetłumaczyć kod C# na AST? – yeeen
Zawieszam projekt. –
Długoterminowe przytrzymaj ... Lol –