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

标签 java antlr antlr4

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

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

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/

相关文章:

antlr4:如何知道在给定上下文的情况下选择了哪个选项

antlr4 - 如何使用左递归和贪婪的 '?' 运算符选择解析器规则优先级?

java - Mockito - 如何从模拟调用触发调用?

java - 返回数据结构以显示信息

antlr - 将简单的 Antlr 语法转换为 Xtext

java - 读取 ANTLR 中的多行值,直到出现特殊符号

parsing - 使用 ANTLR 进行 DSL 的代码替换

antlr - Antlr和PL/I语法

java - JTable使用绑定(bind)​​,如何获取选中的Element?

Java Swing 仅将文件中的唯一行读取到 JtextArea 中