Antlr4 使用片段排除字符

问题描述 投票:0回答:1

我有一个工作

TOKEN
,排除某些字符。不得以
+
-
开头,但在开头之后允许使用这些字符。

TOKEN : ~('+' | '-' | '\u0000' .. '\u001f' | ' ' | '<' | '>' | ':' | '"' | '/' | '\\' | '|' | '?' | '*' | '#' | '@') ~('\u0000' .. '\u001f' | ' ' | '<' | '>' | ':' | '"' | '/' | '\\' | '|' | '?' | '*' | '#' | '@')+ ;

我一直在尝试使用片段来简化它......

fragment EXCLUDED : ('\u0000' .. '\u001f' | ' ' | '<' | '>' | ':' | '"' | '/' | '\\' | '|' | '?' | '*' | '#' | '@');
fragment RESERVED : ('+' | '-') ;
TOKEN : ~(RESERVED | EXCLUDED) ~(EXCLUDED)+ ;

但是我收到错误:

rule reference RESERVED is not currently supported in a set

antlr antlr4
1个回答
0
投票

如果您使用 ANTLR 4 中较短的字符集表示法,您可能不需要使用否定片段。规则:

TOKEN
 : ~('+' | '-' | '\u0000' .. '\u001f' | ' ' | '<' | '>' | ':' | '"' | '/' | '\\' | '|' | '?' | '*' | '#' | '@') ~('\u0000' .. '\u001f' | ' ' | '<' | '>' | ':' | '"' | '/' | '\\' | '|' | '?' | '*' | '#' | '@')+
 ;

与此相同:

TOKEN
 : ~[+\-\u0000-\u001f <>:"/\\|?*#@] ~[\u0000-\u001f <>:"/\\|?*#@]+
 ;
© www.soinside.com 2019 - 2024. All rights reserved.