2010-12-15 83 views
0

我目前使用正則表達式來解析文本報告,以提取各種信息。雖然這種方法有效,但維護正則表達式變得越來越困難。我想知道Antlr是否能夠提供一個更好的方式來完成長期的任務。順便說一句,我以前沒有使用Antlr。ANTLR適合解析文本報告嗎?

AFAIK,Antlr主要用於解析語言,但我的報告不是語言。另一方面,報告遵循一些模式,這就是我能夠使用正則表達式來提取信息的方式。

關於我的文本報告的更多信息:報告有幾個部分,我只對某些部分感興趣,而忽略其餘部分。例如,有一個線程轉儲部分:

===Start=== 
(some text I do not care about.) 
thread <thread-number> <owning-proc-name> <proc-id> 
<resource-owned-by-thread> (optional line) 
... 
===End=== 

然後有一個終止應用程序部分:

===Start=== 
(some text I do not care about, followed by the stack trace of the app) 
<app-name> 
<stack-layer1> 
<stack-layer2> 
... 
===End=== 

我希望通過分析報告,以擺脫與吸氣數據對象方法來報告報告中的各種數據。

Antlr是適合的任務還是應該在其他地方看看?非常感謝你!

回答

3

你可以使用正則表達式輕鬆過濾掉你不想要的文本嗎?如果是這樣,你可以採取一種混合的方法,將是非常有效的:

  1. 運行通過正則表達式過濾器報告刪除文本忽略
  2. 運行報告通過ANTLR解析器掰開部分你關心

爲此,您關心的部分必須符合您可以編寫ANTLR語法的語言。

另一種替代方法是編寫一個自定義掃描器,去除要忽略的部分並標記其餘部分。

這一切都取決於您需要保留的零件的複雜性和規律性。