Estoy tratando de escribir mi propio compilador My Toy Language -> MSIL para comprender mejor cómo funcionan los compiladores. Obtuve el análisis y el léxico trabajando, construí los árboles de expresiones y, utilizando la API del árbol de expresiones System.Linq.Expressions, tengo un intérprete en funcionamiento. Ahora me gustaría emitir algunos ensambles MSIL reales.Vinculación de un árbol de expresiones .NET en un nuevo conjunto
El problema es que no puedo entender cómo construir realmente estos ensamblajes. La clase MethodBuilder solo acepta cuerpos de método MSIL en bruto, así que tengo que obtener el MSIL sin formato de mi árbol de expresiones. Llamar al Expression.Compile() devuelve un delegado que funciona, pero no puedo obtener su MSIL subyacente. Llamar al MethodInfo.GetMethodBody() arroja una InvalidOperationException ya que no está implementada en esa clase secundaria específica.
¿Cómo puedo vincular ese delegado en un nuevo ensamblaje?
Tenga en cuenta que este método tiene algunas limitaciones, como la imposibilidad de compilar métodos no estáticos. –
@ 280Z28: Afortunadamente, My Toy Language no está orientado a objetos, por lo que no será un problema. –
¿Puede explicar cómo obtener el 'MethodBuilder' apropiado? Me doy cuenta de que esto fue hace mucho tiempo :) –