2011-12-09 29 views
1

我在寫一個.NET程序,它對文本文件進行了大量字符串驗證。我想讓用戶能夠設置驗證規則,因此我不必硬編碼很多邊緣情況。例如,我想象像下面(蓋在下拉菜單項來限制用戶的操作和項報價是用戶編寫):C#在運行時解析未知的邏輯條件

IF KEY IS "X" AND VALUE IS "Y" RETURN NOTIFICATION 

(IF KEY IS "X" OR VALUE IS "Y") AND (IF SECTIONNAME IS "I") REPLACE "Y" WITH "J" 

因此,大家可以看到上面我希望能夠與集團的事情使用邏輯AND和OR以及處理IF語句,這些語句都將評估爲某些True/False值以執行某些操作。我的問題是解析數據的最好方法是什麼,以便我知道正確的操作以及正確的分組。通過Google,似乎我可能想創建一個抽象語法樹,如果是這種情況,我一直無法找到一些簡單的例子來真正讓我開始。

任何幫助,非常感謝!

回答

1

我是一個解析器生成器的粉絲(看我的生物),但他們有時矯枉過正。

對於表達式這個簡單的(布爾邏輯)和一小組操作(例如你已經顯示),遞歸下降解析器應該做得很好。如果將語義操作編入解析中,則不需要AST;您可以即時計算布爾方程的結果,並在結果解析之前使用結果來決定是否應該執行解析的操作,因爲遞歸下降解析器從左向右工作。因此,您可以將規則存儲爲文本,並根據需要簡單執行,您的用戶可以當場輸入。

this SO answer on how to build a recursive descent parser by hand

+0

所有的答案至今是強大的讚賞,但,這是一個我一直在尋找!我不試圖重新發明輪子,如果有工具可以做某些事情,但我更願意理解正在發生的事情,並僅僅爲了經驗而自己做。謝了哥們! – Roger

0

您可以通過創建一個Domain Specific Language在C#中做到這一點......基本上你建立了語言的語法看起來像什麼,什麼語言是允許做的,正確的解析器寫的設置規則爲你。