ANTLR适合解析文本报告?

时间:2010-12-15 22:45:19

标签: parsing antlr text-processing

我目前正在使用正则表达式来解析文本报告,以便提取各种信息。虽然这种方法有效,但维护正则表达式变得越来越困难。我想知道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===

我希望通过解析报告得到的是一个数据对象,它使用getter方法来处理报告中的各种数据。

对Antlr来说是合适的任务还是应该在其他地方寻找?非常感谢你!

1 个答案:

答案 0 :(得分:3)

您可以使用正则表达式轻松过滤掉您不想要的文字吗?如果是这样,你可以采取一种非常有效的混合方法:

  1. 通过正则表达式过滤器运行报告以删除要忽略的文本
  2. 通过ANTLR解析器运行报告以拆分您关心的部分
  3. 为了实现这一点,您关注的部分必须符合您可以编写ANTLR语法的语言。

    另一种选择是编写一个自定义扫描仪,剥离要忽略的部分并将其余部分标记化。

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