2013-10-28 2 views
-2

В принципе у меня есть два вопроса:испуская IronPython код в C#

1) Как испускать или генерировать IronPython код (инструменты, ЛИЭС) в C# приложение. Результатом этого процесса должна быть строка, состоящая из реального кода IronPython, а не кода IL.

2) Насколько полезен подход выше над генерированием кода IronPython по собственному усмотрению (просто используя StringBuilder)?

Я ищу какую-то библиотеку генератора кода аналогична воображаемый псевдо генератор кода:

IronPythonCodeGenerator generator = new IronPythonCodeGenerator(); 
Parameter param = new Parameter("str"); 
ParameterValue value=new ParameterValue(param,"This piece is printed by the generated code!!!"); 
Function function = IronPythonCodeGenerator.CreateFunction("PrintExtended",param); 
function.AppendStatement("print",param); 
function.AppendStatement(Statements.Return); 
FunctionCall functionCall = new FunctionCall(function,value); 
generator.MainBody.Append(function); 
generator.MainBody.Append(functionCall); 

Console.WriteLine(generator.MainBody.ToString()); 

, который выводит код IronPython:

def PrintExtended(str): 
    print str; 
    return; 

PrintExtended("This piece is printed by the generated code!!!"); 
+1

Существует модуль [Reflector plugin] (http://ipreflector.codeplex.com/) для генерации кода IronPython от IL. Отражатель, если вы не знаете, это программа, которая декомпилирует сборки .NET. – Icemanind

+0

Могу ли я получить обратную связь, что не так с этим вопросом? – algorytmus

ответ

2

Reflection.Emit для генерации IL-кода, а не для создание высокоуровневого языкового кода. Поэтому, если ваш целевой язык - это IronPython, его создание в StringBuilder, вероятно, будет вашим лучшим выбором.

Это, конечно же, зависит от ваших потребностей. Если все, что вы хотите сделать, это просто генерировать код, не желая изменять порядок методов или изменять методы после того, как они были определены и т. Д., Просто построить код в StringBuilder, а затем скомпилировать его было бы самым простым способом.

+0

Что делать, если я хотел, чтобы код IL был преобразован в код IronPython. Есть ли какая-нибудь существующая библиотека, которая может мне помочь? – algorytmus

+2

Вы имеете в виду декомпилятор? Итак, вы бы выбрали IL, а затем декомпилируете его в IronPython? Почему вы хотите это сделать? Я знаю, что JustDecompile Telerik поставляется с API, но я не уверен, может ли он генерировать какой-либо конкретный язык. См. Http://www.telerik.com/products/decompiler.aspx, если вы хотите это выяснить. –

+0

Я заинтересован в создании кода IronPython на высоком уровне, не нужно беспокоиться о построении низкого уровня (конкатенации строк) и конструкциях утверждений. Построение кода с помощью Reflection.Emit - это нечто среднее, которое не идеально, но также не самое худшее. Самый надежный и подходящий для меня способ - это тот, который я представил в отредактированном вопросе. Поэтому я ищу простейшее, строго типизированное решение для генерации и времени. – algorytmus