我想知道如何匹配语法中的非换行符,其中换行符是终端,希望用它来匹配,例如,可能包含数字标点符号等的标题文件。
我现在正在使用的语法是:
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] ;
警告:您可能希望扩展定义以排除转义的行结束字符,当然这取决于您的最终需求。
关于java - 如何匹配 ANTLR 4 中的任何非换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098633/