2011-10-03 2 views
1

나는 스크립팅 언어를 작성하고 있는데, 나는 렉서와 파서를 수행했으며 동적으로 메모리에서 실행하려고한다.C# 인터프리터를 실행하는 가장 좋은 방법

내가 문이 작동하는 경우 내가 가져올 수 없습니다 (이 코드를 실행하는 가장 좋은 방법은

1) 동작 코드 김정일 세대를 시도 i'ved 일 것입니다 무슨

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); 

같은 뭔가를 말할 수 있습니다 또는 인쇄 기능 이외의) 2) RunSharp, 내가 할 수있는 방법을 일으킬 수 없어 내가 어떻게 할 수 있는지 모르겠어.

누구든지 올바른 방향으로 나를 가리킬 수 있다면!

에 alittle 코드는

+0

1) 연산 코드 생성 : 언어를 구문 분석하는 파서에 의해 식 트리로 변환합니다. Expression 개체는 http://msdn.microsoft.com/library/bb356138.aspx입니다. Expression 개체 트리 컴파일 : http : //msdn.microsoft.com/library/bb345362.aspx. 너는 그것으로 YourLanguegeProvider를 만들었다. – BLUEPIXY

+0

thxs 나는 그것을 검사 할 것이다 편집 : 고마워! 그게 내 요구에 맞게, 그냥 너무 브라우징의 시간을 절약 할 수있는 기능을 수행하고 그들을 호출 할 수 있도록, 난 opcodes 또는 runsharp 함께 그림 수 없습니다 – Steven

답변

0

는 C#을 소스를 생성하고, 내가 바로 당신을 이해한다면 http://support.microsoft.com/kb/304655

+0

만약 내가 그것을 할 수 없어 프로 내가 이런 식으로해야 할 수도 있습니다 : P는 – Steven

+0

내가이 일을 할 것이라고, 당신은 모든 컴파일러의 최적화 혜택을 당신이 생성 된 C# 코드 대신 il asm ;-) 디버깅 할 수 있습니다. – NickD

0

:-) 컴파일 좋은 것 (IronPython을 좋아하지 뭔가) 자원 링크를 도움이 될 것입니다, 당신이 원하는 런타임에 코드를 컴파일하고 실행 하시겠습니까? 그럼 당신은 시도 할 수 http://www.csscript.net/index.html, 링크 된 같은 페이지에 그 예.

3

자바 스크립트와 같은 스크립트 언어가 동적으로 메모리에 컴파일되는 경우.

예 :

//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 
*/ 
    } 
} 
관련 문제