需要Antlr4 lexer谓词吗?

时间:2014-02-18 16:16:34

标签: parsing newline antlr4 lexer lookahead

我尝试解析这段文字

:20: test :254:
aapje
:21: rest
...

:20::21:是特殊标记,因为它们会启动该行。 :254:应为“正常”文字,因为它不会在换行符上开始。

我希望结果是

(20, 'test :254:  \naapje') 
(21, 'rest')

使用\r\n或'\ n'

终止行

我开始试图忽略空格,但我也匹配':254:'标签。所以我必须创建一些使用空白信息的东西。

我希望能做的是这样的事情:

lexer grammar MT9740_lexer;

InTagNewLine :  '\r\n' ~':'; 
ReadNewLine  :'\r\n' ;

但第一个会消耗:我怎样才能生成这些令牌?或者有一种聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

我的理解是你正在寻找一些与行首相匹配的词法规则。此词法分析器规则应标记您的:20:或:21:仅出现在一行的开头

SOL   :   {getCharPositionInLine() == 0}?  ':' [0-9]+ ':'    ;

然后,您的解析器规则可以在解析剩余的行之前查找此SOL令牌。