如何匹配 ANTLR 4 中的任何 non-newline 字符?

How to match any non-newline character in ANTLR 4?

我想知道如何匹配语法中的 non-newline 字符,其中换行符是终端,希望用它来匹配,例如,可能包含数字标点符号等的标题文件.

我现在使用的语法是:

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  : ~[\r\n] ;

警告:您可能希望扩展定义以排除转义行结束字符,当然这取决于您的最终需求。