在 C# 中发出 IronPython 代码

本文关键字:IronPython 代码 | 更新日期: 2023-09-27 18:37:09

基本上我有两个问题:

1) 如何在 C# 应用程序中发出或生成IronPython代码(工具、库)。此过程的结果应是由实际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!!!");

在 C# 中发出 IronPython 代码

Reflection.Emit用于生成 IL 代码,而不是用于生成高级语言代码。因此,如果您的目标语言是 IronPython,那么在StringBuilder中构建它可能是您最好的选择。

这当然取决于您的需求。如果您只想生成代码而不想更改方法的顺序,或者在定义方法后修改方法等,那么只需在StringBuilder中构造代码然后编译它是最简单的方法。