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++等)的简单结构,将更容易实现这种解析器。