我想知道如何在换行符是终端的语法中匹配非换行符,希望用它来匹配,例如,可能包含数字标点符号等的标题文件。
我现在使用的语法是:
grammar ABCHeaderNew;
import Configuration;
root: header EOF;
header: index title;
index: 'X:' INDEX stop+;
title: 'T:' TITLE stop+;
INDEX: INTEGER+;
TITLE: ANY+;
stop: comment | NEWLINE;
comment: '%' ANY* NEWLINE;
INTEGER: [0-9];
NEWLINE: 'r'? 'n';
ANY: ~(NEWLINE);
WHITESPACE: [ t]+ -> skip;
这不会编译(错误消息:集合中当前不支持规则引用NEWLINE)。我尝试过的其他几种变体也不起作用。
有人知道一个好的变通办法吗?
not运算符只对集合进行操作,而令牌引用(如NEWLINE
)不合格。
只需使用标准集表示
ANY : ~[rn] ;
注意:您可能需要扩展定义以排除转义的行尾字符,当然这取决于您的最终需求。