2012-09-10 64 views
4

我正在尋找爲C#創建一個小解釋器,我可以在某些應用程序中加載該解釋器。的東西,可能能夠運行這樣的事情:如何構建.NET解釋器(或Powershell如何工作?)

> var arr = new[] { 1.5,2.0 }; 
           arr = { 1.5, 2.0 } 
> var sum = arr.Sum(); 
           sum = 3.5 

所以,我想通過創建所有變量的字典和它們的類型,然後編譯各行的,因爲他們來這可以實現,然後執行該函數,得到結果並將其粘貼在變量字典中。

但是,在我看來,這可能實際上是相當困難的,可能非常低效。

然後我認爲Powershell正在做我所需要的。但是它是如何完成的?任何人都可以告訴我Powershell是如何工作的,或者建立.Net解釋器的好方法是什麼?

+2

財產以後像[這裏](HTTP:/ /blingcode.blogspot.se/2012/07/snoopshell-marriage-of-snoop-wpf-and.html)?或者[roslyn](http://msdn.microsoft.com/en-gb/roslyn) – Daniel

+0

@Daniel:是的!像這樣的東西看起來很酷! –

回答

4

你在你的應用程序中如何host the PowerShell engine,讓它爲你做解釋?例如:

private static void Main(string[] args) 
{ 
    // Call the PowerShell.Create() method to create an 
    // empty pipeline. 
    PowerShell ps = PowerShell.Create(); 

    // Call the PowerShell.AddScript(string) method to add 
    // some PowerShell script to execute. 
    ps.AddScript("$arr = 1.5,2.0"); # Execute each line read from prompt 

    // Call the PowerShell.Invoke() method to run the 
    // commands of the pipeline. 
    foreach (PSObject result in ps.Invoke()) 
    { 
    Console.WriteLine(result.ToString()); 
    } 
} 

如果你的目標是學習如何建立一個解釋器,看看該interpreter pattern

+0

感謝您的提示,我查看了Powershell DLL。這段代碼確實很龐大,而且它們有自己的解析機制,它不會經歷任何類型的IL編譯/程序集加載。這一切都是通過動態解析和動態調用完成的。 –

3

類似this?或許羅斯林(http://msdn.microsoft.com/en-gb/roslyn)

添加答案評論,因爲它似乎比我首先想到的更多有用