2011-03-29 74 views
1

在我編寫的.NET程序的一部分中,我希望用戶能夠在運行時編寫一個簡單的函數體,它只返回true或false。用戶需要通常的基本邏輯運算符,嵌套邏輯運算的能力(一個& &(b || c))和一小部分運算符「==」「!=」「包含」notcontains「。換句話說,我讓用戶在運行時編寫一個作爲過濾器謂詞的函數。簡單謂詞DSL

我意識到像IronPython這樣的東西很容易符合法案,但有很多其他(危險的)事情他們可以做,我不希望他們能夠。

什麼人會推薦我用這樣的東西?

+0

用戶可以輸入一個LINQ表達式,然後動態地解析它以確保它是一個布爾表達式嗎? – 2011-03-29 02:10:17

回答

0

如果您的語法真的很簡單,我建議您考慮編寫自己的解析器和一個小字節碼解釋器。開發成本沒有你想象的那麼高,並且有幾個有用的工具。

可可/ R是一個分析器發電機,可以採取一門語言的語法和爲您生產出一個解析器和掃描儀,這應該讓你開始用一個簡單的解釋:http://www.ssw.uni-linz.ac.at/coco/

有一個樣本分析器和解釋器稱爲味道可以幫助你開始。