2012-08-28 55 views
0

我確信這已經完成,我只是找不到它。將字符串解析爲複雜布爾值的遞歸邏輯?

我需要把「((A或B)和C)或D」這樣的東西變成一個屬性的數據庫查詢。具體來說,我使用Ruby Sequel。任何人都可以通過一個例子或實用程序指向我,或者會阻止我重新發明輪子嗎?

+0

看看樹梢:http://treetop.rubyforge.org/ –

+0

謝謝夥計們。我基本上是在尋找已經完成了我所說的代碼/僞代碼。我們只在這裏談論三個運營商,對吧?我確定它在某個地方,因爲這似乎不是一件非常不尋常的事情。無論如何,我們很匆忙,所以現在我們只是放在括號上(目前的客戶可以不用)。只需處理AND和OR就沒有問題。稍後我們將重新討論並實現括號。 – Huliax

回答

2

您可以使用ANTLR定義語法,併爲這些類型的字符串自動生成一個Ruby解析器。 ANTLR是一個解析器生成器,它允許您爲語言定義語法(例如您所描述的布爾語言)。

解析後,您可以指定需要採取什麼操作來構建所需的數據結構(在您的情況下爲捕獲查詢結構的樹數據結構)。

這不是特別的Ruby問題,因爲ANTLR也可以爲其他語言生成解析器。在你的情況下,它會產生一個Ruby解析器,你可以集成到你的應用程序中來解析字符串並生成你需要的數據結構。