Расширение http://www.soapui.org/soap-mocking/creating-dynamic-mockservices.html и основано на http://www.soapui.org/apidocs/com /eviware/soapui/support/xmlholder.html Я придумал это:
// Create XmlHolder for request content
def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
holder.namespaces["ns3"] = "ns3"
// Get arguments
def custNo = holder.getNodeValue("//ns3:CustomerNumber")
context.setProperty("custNo", custNo)
Только что нашел. DLR-версия LambdaExpression предоставляет метод CompileToMethod, который делает именно то, что мне нужно.
lambdaExpression.CompileToMethod(myMethodBuilder);
Чтобы генерировать необработанный IL, вам необходимо определить свой собственный AST. Вам нужно получить AssemblyBuilder, затем ModuleBuilder, а затем вы можете определить метод уровня модуля или получить новый TypeBuilder и теперь MethodBuilder для определения метода уровня класса.
Вы сказали, что у вас уже есть лексер и синтаксический анализатор. это означает, что вы можете построить AST. Так что просто пройдитесь по разобранным выражениям и испустите свой IL.
Даже если вы получите сгенерированный (путем компиляции) код, вы не сможете сделать с ним что-то полезное, поскольку сгенерированный код зависит от инфраструктуры. Например, если вам нужно скомпилировать замыкания, вы должны создать класс или другое хранилище для лексических переменных и так далее (например, нелексическая передача управления, которая требует использования исключений в .net)