ANTLR4 中令牌的负数

Negative of token in ANTLR4

我这样定义 LEGAL_ESCAPE 令牌:

LEGAL_ESCAPE: '\'('b'|'f'|'r'|'n'|'t'|'"')?;

我有什么办法可以使用这个标记的负数来定义另一个 ILLEGAL_ESCAPE 标记吗?

当然:

LEGAL_ESCAPE    : ESC [bfrnt"] ;
ILLEGAL_ESCAPE  : ESC 
                   ( ~[bfrnt"]  // any char not in the set
                   | EOF        // it is a non char
                   )
                ;
fragment ESC    : '\' ;

Antlr4 Grammar Repo 中的各种示例语法中隐含了相当多的 'tricks'。 abnf 和 less 语法是很好的起点。 Java8、Antlr4 和 Python3 语法演示了许多更复杂的功能。

请注意,否定运算符 ~ 适用于字符、字符集和字符范围、单个标记和单个标记集。但是,

ILLEGAL_ESCAPE  : ~LEGAL_ESCAPE ;

不太可能是您要求的。