前段時間我開始爲cables which WikiLeaks released寫一個BNF-based grammar。但是我現在意識到我的方法可能不是最好的,我正在尋求一些改進。維基解密電纜的容錯python解析器
cabe由三部分組成。頭部有一些RFC2822樣式的格式。這通常解析正確。文本部分有一個非正式的規範。例如,有一個REF -line。這應該從REF:
開始,但是我找到了不同的版本。以下正則表達式捕獲大多數情況:^\s*[Rr][Ee][Ff][Ss: ]
。所以前面有空格,不同的例子等等。文本部分大多是純文本,並帶有一些特殊的格式標題。
我們想識別每個字段(日期,REF等)並將其放入數據庫。我們選擇了Pythons SimpleParse。目前,解析在每個無法識別的字段處停止。我們現在正在尋找更容錯的解決方案。所有領域都有某種秩序。當解析器不能識別某個字段時,它應該在當前字段中添加一些「not recognized」blob並繼續。 (或者,也許你在這裏有更好的方法)。
你會建議什麼樣的解析器或其他類型的解決方案?周圍有更好的東西嗎?
你確定你需要一個解析器嗎?你所描述的電纜結構聽起來像一個3型語言(在喬姆斯基的分類中),這將暗示一個詞法分析器flex)或正則表達式是「解析」電纜的手段 – phynfo 2011-05-15 08:28:10
爲什麼不在每個標頭標記中添加'/ not_recognized'? – 2011-05-15 09:59:36
我不確定是否真的需要解析器,從我的印象來看,解析器輸入更多可讀性比正則表達式多,所以我十歲戴爾贊成它。我會看看flex。 – qbi 2011-05-15 11:45:03