È attualmente possibile convertire il codice C# in un Abstract Syntax Tree?
Sì, banalmente in circostanze particolari (= utilizzando il nuovo Expressions framework):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Questo crea un albero di espressione per la lambda, vale a dire una funzione di prendere un int
e restituendo il doppio. È possibile modificare l'albero di espressione utilizzando il framework espressioni (= le classi da in quel namespace) e quindi compilarlo in fase di esecuzione:
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
Si noti che tutte le espressioni sono immutabili in modo da avere per essere costruito di nuovo da composizione. In questo caso, ho aggiunto un'aggiunta di 1.
Si noti che questi alberi di espressione funzionano solo su espressioni reali, ad esempio il contenuto trovato in una funzione C#. Non è possibile ottenere alberi di sintassi per costrutti superiori come le classi in questo modo. Usa il framework CodeDom per questi.
fonte
2008-10-17 19:20:53
Mi chiedo come va il tentativo di tradurre il codice C# in AST? – yeeen
Ho messo il progetto in attesa. –
Sospensione a lungo termine ... Lol –