2010-12-15 81 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语法的语言。

另一种替代方法是编写一个自定义扫描器,去除要忽略的部分并标记其余部分。

这一切都取决于您需要保留的零件的复杂性和规律性。