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 ;
不太可能是您要求的。
我这样定义 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 ;
不太可能是您要求的。