2011-10-21 26 views
3

我一直在尋找幫助用戶創建語法的東西。有各種各樣的IDE,但是......它們似乎是文本編輯器,它們處理語法文件本身。我正在尋找一些以數據爲中心的方法。所以,假設我有很多我想用解析器解析的數據的例子。所以,我想通過這些示例數據並直接從它定義語法。從示例數據創建解析器語法

是否有任何現有的軟件做類似的事情?

我要去嘗試更清晰......

以數據爲中心的辦法,我提到會在用戶的數據樣本中加載。然後他們會選擇表示它們是字段的部分,或選擇項目並將它們標記爲分隔符等。

與大多數IDE相反,我發現只有用文本編輯器編寫語法本身。

+0

我一直在想這件事,但我認爲你必須從你的數據集中推斷一個語法,但我渴望看到其他人的答案。 –

+0

有趣的問題。看看我的答案是否朝着正確的方向前進......我可以詳細說明我提到的獲取正則語法/正則表達式的任何步驟。 – Patrick87

+0

1)通常,從數據中推斷出獨特的語法是不可能的。 2)存在語法描述語言是因爲人們認真研究了這個問題並提出了最好的(從他們的角度來看)解決方案。所以缺乏「以數據爲中心的方法」就表明這個想法不可行。 –

回答

2

任何有限的字符串組合都是一種常規語言。寫一個接受這種語言的NFA是微不足道的。由此,您可以使用子集構造生成DFA,並使用這樣的事實將DFA最小化,即對於不可區分性關係的每個等價類,DFA只需要一個狀態。所以這是一個完全算法的過程......獲得正則表達式和/或語法同樣很簡單。這就是說,如果你想產生一個語法來產生字符串,可能還有其他的......你的問題似乎不適合。對於任何有限的字符串集合,無限多的語法生成它們和其他字符串......只要您擊中目標數據集,就可以生成任何其他字符串,這個數字的無限大。你的問題基本上是,「給定一個序列a1,a2,...,an,...的開始,說出接下來的n個元素是什麼。」這是不可能的,除非你只想某些答案...在這種情況下,你總是可以從DFA開始並提出推廣方法(即只接受更多的字符串)。

確實,例如,一個正規的語法,很容易引入新的字符串...所以也許用第一個答案作爲出發點。但請注意,從NFA到DFA的轉換可能會非常低效......漸近指數式。

+2

這個問題提出的常見方式是「覆蓋所有數據的最小描述是什麼?」導致了一組小得多的語法,這些語法對於某些大小或其他複雜性度量不相互支配。 OP也需要計數器例子來獲得好的語法,否則語法G = CHAR *將是他將得到的唯一答案(非常小)。從根本上講,這是一個機器學習問題。總的來說,除非他的數據真的很規律,否則我認爲他不會做得很好,在那種情況下他不需要工具。 –

+0

偉大的信息,但...我問的是軟件工具,而不是算法。我並不是建議某些東西可以自動完成,而只是以數據爲中心的IDE而不是以語法爲中心的IDE。 – mentics

+0

@taotree:就像我在帖子中提到的,它似乎是製作一個最小的DFA,而相應的正則語法將是一個很好的起點......不知道是否有任何實際操作! – Patrick87