带变量的令牌定义

时间:2013-01-16 09:24:53

标签: antlr

我正在编写一个语法来解析一个看起来像这样的日志文件:

V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:DEBUG:<PCDATA>
V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:DEBUG:<PCDATA>
etc...

其中PCDATA可以包含任何符号(包括\n)和'7340057'是PID(进程ID)。

问题是,如何描述PCDATA的结尾?

我不能说goreedy并匹配任何东西,直到你看到V9013_MURGIN_AE_7340057,因为那是PID并且它在日志文件中发生变化,因此我无法将其值硬编码为语法。

有没有办法做这样的事情:

  1. 我第一次匹配7340057(或当前的任何内容) 文件),把它放到一些var中,比如$PID
  2. PCDATA描述为nongreedy (.)* - 匹配到$PID也就是说,是否可以使用变量(参数化)令牌定义?
  3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

我同意不使用ANTLR的建议。

然而,我之前处理这个问题(非常有效)的方式是:

pcdata : (PID)=> () | . pcdata ;