C # Лучший способ выполнения интерпретатора - PullRequest
1 голос
/ 03 октября 2011

Я пишу на языке сценариев, я сделал лексер и парсер, и я хочу динамически выполнять в памяти.

Допустим, у меня есть что-то вроде

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 (я не мог получить, если оператор работает или что-то кроме функции Print) 2) RunSharp, я не могу выполнять функциипотому что, как я могу это сделать, я понятия не имею, как.

Если бы кто-нибудь мог указать мне правильное направление!

Alittle Code поможет Ссылка на ресурс (а не что-то вроде IronPython) будеттоже хорошо

Ответы [ 3 ]

3 голосов
/ 03 октября 2011

ваш язык скриптов, такой как 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
*/
    }
}
0 голосов
/ 03 октября 2011

Если я вас правильно понял, вы хотите скомпилировать и запустить код во время выполнения? тогда вы можете попробовать http://www.csscript.net/index.html, пример на той же странице.

0 голосов
/ 03 октября 2011

сгенерируйте исходный код на c # и скомпилируйте его :-) http://support.microsoft.com/kb/304655

...