C#解释器执行的最佳方式

时间:2011-10-03 07:59:57

标签: c# scripting interpreter

我正在编写脚本语言,我已经完成了词法分析器和解析器,我想在内存中动态执行。

让我说我有类似

的东西
function Hello(World)
{
    Print(world);
}
var world = "World";
var boolean = true;
if(boolean == true)
{
    Print("True is True");
}
else
{
    Print("False is True");
}
Hello(world);

执行此代码段的最佳方式是什么?我试过了

1)OpCode Il Generation(我无法获得if语句工作或Print函数以外的任何内容) 2)RunSharp,我不能做功能导致我能做到的方式我不知道怎么做。

如果有人能指出我正确的方向!

Alittle Code会有所帮助 链接到资源(不像IronPython)也很好

3 个答案:

答案 0 :(得分:3)

您的脚本语言,如JavaScript,如果它在内存中动态编译。

示例:

//csc sample.cs -r:Microsoft.JScript.dll
using System;
using System.CodeDom.Compiler;
using Microsoft.JScript;

class Sample {
    static public void Main(){
        string[] source = new string[] {
@"import System;
class JsProgram {
    function Print(mes){
        Console.WriteLine(mes);
    }
    function Hello(world){
        Print(world);
    }
    function proc(){
        var world = ""World"";
        var bool = true;
        if(bool == true){
            Print(""True is True"");
        }
        else{
            Print(""False is True"");
        }
        Hello(world);
    }
}"
        };
        var compiler = new JScriptCodeProvider();
        var opt      = new CompilerParameters();
        opt.ReferencedAssemblies.Add("System.dll");
        opt.GenerateExecutable = false;
        opt.GenerateInMemory = true;
        var result = compiler.CompileAssemblyFromSource(opt, source);
        if(result.Errors.Count > 0){
            Console.WriteLine("Compile Error");
            return;
        }
        var js = result.CompiledAssembly;
        dynamic jsProg = js.CreateInstance("JsProgram");
        jsProg.proc();
/*
True is True
World
*/
    }
}

答案 1 :(得分:0)

生成c#source并编译它:-) http://support.microsoft.com/kb/304655

答案 2 :(得分:0)

如果我理解你,你想在运行时编译并运行代码吗?然后你可以试试http://www.csscript.net/index.html,这是一个链接在同一页面上的例子。