我正在尋找可以在查詢過濾器上操作的解析器。但是,我不太清楚術語,所以它證明了辛勤工作。我希望有人能幫助我。我已經閱讀了「遞歸下降解析器」,但是我想知道這些是否適用於全面的語言解析器,而不是我正在尋找的邏輯表達式評估。查詢過濾器表達式樹的解析器
理想情況下,我在尋找.NET代碼(C#),但也使用了類似的T-SQL中的解析器。
我想要的是什麼解析例如:
((A = B)|(E = 1))&(C < = d)
理想的情況下,運營商可以自定義(例如'<'vs'lt','='vs'=='vs'eq'等),我們可以指定函數類型標籤(例如(left(x,1)='e'))。解析器加載它,服從命令優先級(理想地處理缺少任何括號),然後用表達式回調我的代碼以評估布爾結果 - 例如, 'A = B'?)。我不希望解析器理解表達式中的自定義函數(儘管一些基本的函數會很有用,比如字符串分割)。將表達式(分成左側和右側部分)很好。
解析器最好問最少數量的問題必須計算出最終結果 - 例如,如果AND的一邊是假的,則沒有評估另一邊的點,並且首先評估最容易的一面(即,在上面的表達式中,'c < = d'應該被假定爲更快並且因此首先被評估。
我可以想象,這是很多工作要做,然而,相當普遍。任何人都可以給我任何指針嗎?如果沒有像上面那樣靈活的解析器,是否有任何基本的解析器可以使用作爲一個開始?
非常感謝
李
謝謝Vinay。這真的很有幫助,而且自從我發佈這個問題以來,我學到了更多關於解析的知識。我一直在看.NET表達式樹,並想知道這是否會起作用?看起來,定義語法的靈活性較低,但它是框架的一部分。唯一的問題是我找不到一個將字符串加載到樹中,然後被「回調」以評估個體表達式的示例。我會繼續尋找,但ANTLR目前看起來像解決方案。 謝謝,李 – 2009-09-17 14:25:55
@李:您可以編寫代碼將您的ANTLR樹轉換爲.Net表達式樹,以便使用ANTLR中的AST功能進行評估。 – user7116 2009-11-02 15:32:46