我正在尋找一個可以在查詢過濾器上運行的解析器。但是,我不太確定術語,所以它證明了很難。我希望有人可以幫助我。我已經讀過“遞歸下降解析器”,但我想知道這些是否適用於完整的語言解析器,而不是我正在尋找的邏輯表達式評估。
理想情況下,我正在尋找.NET代碼(C#),但也是一個在T-SQL中工作的類似解析器。
我想要的是要解析的東西,例如:
((A = B)|(E = 1))及(三<= d)
理想情況下,運算符可以定義(例如'<'vs'lt','='vs'=='vs'eq'等),我們可以指定函數類型標籤(例如(left(x,1)=的'e'))。解析器加載它,服從順序優先級(理想情況下處理缺少任何括號),然後使用表達式回調我的代碼以計算布爾結果 - 例如'a = b'?)。我不希望解析器理解表達式中的自定義函數(儘管一些基本函數會很有用,比如字符串拆分)。拆分錶達式(分為左手和右手部分)會很好。
優選地,解析器要求最小數量的問題必須計算出最終結果 - 例如,如果AND的一側為假,則沒有評估另一方的點,並且首先評估最簡單的一側(即在上面的表達式中,'c <= d'應該假設更快,因此首先進行評估。
我可以想像,這是很多工作要做,但是,相當普遍。任何人都可以給我任何指示嗎?如果沒有像上面那樣靈活的解析器,那麼我可以使用任何基本解析器作為開始嗎?
非常感謝
背風處