所以這就是我期望實現的。我想給我的用戶一個單一的谷歌類似的文本框,他們可以鍵入他們的查詢。我希望他們能夠表達半自然語言,比如解析用戶的查詢
"view all between 1/1/2008 and 1/2/2008"
它的確定,如果語法有相當的結構,並僅限於這個特定的領域......這些都是專業用戶誰將會使用這個。
最後,我想我會的解析結果可作爲某種表達式樹的。但是,如果你對於什麼樣的數據結構可能會更好有一些其他想法。
這是C#:-)
所以這就是我期望實現的。我想給我的用戶一個單一的谷歌類似的文本框,他們可以鍵入他們的查詢。我希望他們能夠表達半自然語言,比如解析用戶的查詢
"view all between 1/1/2008 and 1/2/2008"
它的確定,如果語法有相當的結構,並僅限於這個特定的領域......這些都是專業用戶誰將會使用這個。
最後,我想我會的解析結果可作爲某種表達式樹的。但是,如果你對於什麼樣的數據結構可能會更好有一些其他想法。
這是C#:-)
您正在描述一種編程語言。授予它是一種小語言(通常稱爲小語言,或域特定語言(DSL))。如果你從來沒有聽說過遞歸下降解析器這個術語,那麼你最好遵循Paul的建議並使用一些描述的下拉框。
然而,再次,我會同意他的觀點,如果你想這樣做,ANTLR的是要走的路。網站上有教程可以幫助你入門。基本上,您將需要描述如何使用Backus-Naur Form表示法的語法。
然後,您將在您的語法庫上運行Antlr,並生成解析器。然後,您可以將來自教科書的輸入提供給抽象語法樹。然後您可以使用該樹來生成您的查詢。這聽起來並不難,但有一點點。
如果你真的想要和/或想擴展你的編程翅膀,你可以閱讀Dragon Book,AKA編譯器:原理,技術和工具。
祝你好運我的朋友。
試圖解析這些東西將是一場災難,並ultimatley非常有限的用戶,從而挫敗他們更然後幫助他們。我建議使用預定義的查詢類,以及某種查詢生成器工具,它具有下拉式表單中的所有可用選項。你可以爲不同的數據類型使用不同的布爾運算符(大於,小於數字,比如不像字符串等),但是我認爲這會比實際解析出用戶輸入的內容更有意義。
表達式樹是一個好主意。在那裏有許多優秀的通用解析器和解析器生成器,可以將正確的查詢字符串轉換爲表達式樹。
你可以給我/我們一些這些解析器和解析器生成器的例子參考? – 2008-12-09 14:54:48
我一直在這種情況之前。經過多次討論,我們認爲上下文敏感的下拉菜單比單純的文本框更好。
例如,有4個下拉菜單,但最後3個禁用。然後,當用戶從第一個選項中選擇一個選項時,它填充並啓用其他選項。因此,他們會選擇「查看所有」,然後選擇「之間」,然後可能會彈出文本框或最後兩個日曆。
Here's an example that's kind of like what I am talking about
我不知道這是否會對你有幫助,但是我們做了什麼:我們給了用戶預定義的標準,比如日期選擇,我們給了他們兩個日曆彈出窗口,以便他們可以從中選擇日期範圍。 ..我們沒有強制它..所以日期過濾器的使用只適用於當用戶指定日期...同樣,你也可以給用戶一個預先定義的標準選擇...除此之外,表達式樹似乎是一個很好的解決方法。
使用Oslo,它是專門爲此設計的...
的GOLD Parser Generator具有用於設計和測試你的語法,相當不錯的教程和文檔一個有用的UI,並且很容易從C#中使用。
我們已經實施了下拉菜單......我們的用戶必須做很多點擊才能將動態元素添加到他們的查詢中,這是非常令人沮喪的。注意我說「我們的用戶」,我知道一般來說你的建議可能更容易,但這些人知道我們的應用程序上下,並得到培訓:-) – 2008-12-09 15:03:19