【问题标题】:How to match any non-newline character in ANTLR 4?如何匹配 ANTLR 4 中的任何非换行符?
【发布时间】:2015-12-04 22:35:57
【问题描述】:

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

我现在使用的语法是:

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 目前在集合中不受支持)。我尝试过的其他几种变体也不起作用。

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

【问题讨论】:

    标签: java antlr antlr4


    【解决方案1】:

    not 运算符仅对集合进行操作,而标记引用(例如 NEWLINE)不符合条件。

    只需使用正常的集合表示

    ANY  : ~[\r\n] ;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2010-11-12
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多