首页 文章

如何匹配ANTLR 4中的任何非换行符?

提问于
浏览
0

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

我现在正在使用的语法是:

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) . 还有其他一些我试过的变体也没用 .

有谁知道一个好的解决方法?

1 回答

  • 1

    not运算符仅对集合进行操作,并且令牌引用(例如 NEWLINE )不符合条件 .

    只需使用普通的集合表示

    ANY  : ~[\r\n] ;
    

    警告:您可能希望扩展定义以排除转义的行尾字符,具体取决于您当然的最终需求 .

相关问题