Antlr 带变量的令牌定义

Antlr 带变量的令牌定义,antlr,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... V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:调试: V9013_MURGIN_AE_7340057[01/10/2013 10:07

我正在编写语法来解析日志文件,如下所示:

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...
V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:调试:
V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:调试:
等
其中,
PCDATA
可以包含任何符号(包括
\n
),而“7340057”是一个PID(进程id)

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

在看到
V9013\u MURGIN\u AE\u 7340057
之前,我不能说去不可重复并匹配任何内容,因为这是PID,它会在日志文件中发生变化,所以我无法将其值硬编码为语法

有没有办法做到这一点:

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...
  • 第一次匹配
    7340057
    (或当前 文件),将其放入某个变量中,例如
    $PID
  • PCDATA
    描述为nongreedy
    (.)*
    -匹配直到
    $PID
    ,也就是说,是否可以有一个变量(参数化)令牌定义

  • 提前谢谢。

    我同意不使用ANTLR的建议

    然而,我以前处理这个问题的方式(相当不完善)是:

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

    我建议您不要使用
    antlr
    进行此类操作。使用任何编程语言(java,C++等)的简单结构,将更容易实现这种解析器。