2017-04-13 51 views
0

我正在嘗試在C#項目上工作,並希望允許用戶通過在編輯器中鍵入代碼來即時運行代碼。因此,考慮到這一點,我想過編寫某種腳本編輯器,解析器和評估器,但首先要與其他人一起檢查,以防止我重新發明輪子?表達式編輯器/解析器/評估器

所以,我的想法是/是...

  1. 寫語法高亮的編輯器,我可以寫代碼到, 包括使用自定義的關鍵字。
  2. 將邏輯添加到編輯器,以便它能夠根據編輯器中的文本格式化 內容。
  3. 有一種「行動」已輸入文本的方式。

舉例來說,如果我輸入以下...

if (Shape.IsACube()) 
{ 
    // Do some cube stuff 
} 
else if (Shape.Area(height, length, width) > 40) 
{ 
    // Do some large area stuff 
} 

...然後我想能夠在飛行運行的代碼,就好像它是應用程序的一部分。

我希望所有這些都有道理。有什麼想法嗎?

+1

您要使用哪種語法的語法?你自己還是C#? – eocron

+0

由於我們無法在此主題中添加任何答案,因此我將添加它作爲評論。創建你的編譯器是一項非常重要的工作,我建議你嘗試一些免費的庫,例如(https://csharpeval.codeplex.com/)或者我的PRO庫(http://eval-expression.net/),它們幾乎支持所有的。 –

回答

0

你想使用哪種語法的語法?你自己還是C#? 如果您只是想在運行時編譯一些C#代碼 - 您可以使用類似CodeDOM。突出顯示可以通過C#Syntax Highlighter來實現。

如果你想要自己的語法與你的終端/非終端 - 你應該使用語法制造者,如ANTLR4。通過這種方式,您將瞭解大多數編譯器/解釋器是如何工作的。

主要的想法是,你寫詞法(其中負責你輸入的符號化)和分析器(這是actualy只是語法規則列表,換句話說,「製作」)。它會給你完整的AST,從中你可以評估/突出你的文字。包括C#語法(甚至ANTLR4本身被呈現)在內的許多語言語法已經在您之前編寫在here中。所以你可以選擇一些並根據需要進行修改。

+0

嗨eocron,並感謝您的寶貴意見。 –

+0

我可能想要使用的語法將是我自己的,但我對它的考慮越多,其中大部分可能就是C#。如果可能的話,我也希望能夠一次完成一行代碼,就像調試會話一樣,儘管我明白這需要更多的工作,而不是直接編譯代碼。 –

+0

然後我建議你爲此使用ANTLR4。您可以在存儲庫中找到C#語法並根據需要對其進行修改。 ANTLR4 basicaly,只是創建分析器/詞法分析器類,它不會編譯它們,它只是產生它們。就像WCF工具爲服務生成代理類一樣。雖然步入式有點棘手。你需要一些高級的運行時編譯器,你可以看看Roslyn編譯器,雖然我不確定它能夠跨越一些C#字符串。 – eocron