¿Actualmente es posible traducir el código C# a un árbol de sintaxis abstracto?
Sí, trivialmente en circunstancias especiales (= usando la nueva Expressions framework):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Esto crea un árbol de expresión de la lambda, es decir, una función de tomar un int
y devolver el doble. Puede modificar el árbol de expresión utilizando el marco Expresiones (= las clases a partir de ese espacio de nombres) y luego compilarlo en tiempo de ejecución:
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
en cuenta que todas las expresiones son inmutables por lo que tienen que ser construido de nuevo por composición. En este caso, he añadido una adición de 1.
Observe que estos árboles de expresiones solo funcionan en expresiones reales, es decir, contenido encontrado en una función C#. No puede obtener árboles de sintaxis para construcciones más altas como las clases de esta manera. Use el marco CodeDom para estos.
¿Se pregunta cómo va su intento de traducir el código C# a AST? – yeeen
Puse el proyecto en espera. –
Mantener a largo plazo ... Lol –