2013-10-15 20 views
1

我有一個程序,用戶希望能夠使用格式ANTLR 4是否允許我爲布爾表達式創建解析器?

(SOMETYPE!= 'A' 和SOMETYPE!= 'B')或(anotherType = 'ABC' 過濾掉某些字符串標準和 somethingElse ='cns')

我們正在研究使用ANTLR 4來解析這個問題。每個組將總是被一個OR分開,並且每個內部組將總是由AND分開。

我是一名初級開發人員,如果這是我們想要進入的路線,我會通過閱讀本書來學習ANTLR4。我只是想確保ANTLR4會照顧到這一點。

我們基本上想知道表達式是基於這個文法評估爲true還是false。

+0

正如Ira所說,ANTLR不會爲你評估這件事。就你而言,使用一些Java集成腳本可能更安全/更快(如Groovy:http://groovy.codehaus.org/JSR+223+Scripting+with+Groovy)。如何評估與ANTLR,看到這個問答:http://stackoverflow.com/questions/15610183/if-else-statements-in-antlr-using-listeners –

回答

3

Antlr不評估表達式。它解析它們。

解析結果的「評估」由您決定。通常,您將節點構建操作附加到語法規則;與此同時,ANTLR會幫助你建立一棵樹,然後你走到樹上去評估它。

如果你真的鬼鬼祟祟,你可以在語義動作中做表情評估。傳遞值有點像傳遞創建的節點。傳遞值減少需要更多的努力,我不是那種用ANTLR來描述如何做到這一點的人。

+0

我想我不明白的目的。分析從哪些方面受益?創建一個編譯器? – envinyater

+0

無論何時需要處理複雜的信息結構,您都必須首先*閱讀*該信息。這基本上是解析功能。像ANTLR這樣的解析器生成器(以及許多其他的解析器生成器)專注於解析計算機程序(像英文或CSV文件),將源代碼分解爲令牌,並識別如何將令牌組合成更復雜的結構[重複]。這對計算器來說非常方便,就像C++一樣。 ... –

+0

....已知對於專業人員來說,構建樹來表示程序的組合結構是一種非常有效的方法,可以在其中可以處理/分析/編譯的窗體中捕獲解析結果或在你的情況下,「評估」)。如果你建立這樣一個工具,你會更加欣賞這一點。您可以嘗試*避免*以這種方式爲您的特定任務構建此類工具,並且您將重新發現人們爲什麼這樣做,例如,您的過濾器可能會重複處理;速度將很重要,然後你會發現這個標準方案的效果很好。 –