我有一个简短的问题:
// Lexer
LOOP_NAME : (LETTER|DIGIT)+;
OTHERCHARS : ~('>' | '}')+;
LETTER : ('A'..'Z')|('a'..'z');
DIGIT : ('0'..'9');
A_ELEMENT
: (LETTER|'_')*(LETTER|DIGIT|'_'|'.');
// Parser-Konfiguration
WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
我的问题是这是不可能的,因为:
因此,对于该输入 [14:55:32] 错误(208):ltxt2.g:61:1:以下标记定义永远无法匹配,因为先前的标记与相同的输入匹配,因此禁用了替代项 2:字母、数字、A_ELEMENT、WS
我的问题是我还需要用 OTHERCHARS 捕获 UTF8 ......而且我不能将所有特殊的 UTF8 字符放入 Lexer 规则中,因为我的范围不能像(“!”..“?”)。
所以我需要NOT(〜)。这里的 OTHERCHARS 可以是除“>”或“}”之外的所有字符。这两个关闭了一个字面的上下文,并且被禁止在其中。
似乎没有很好地引用此类案例,所以如果有人知道解决方法,我会很高兴。这里的 NOT 运算符产生了我需要解决的矛盾。
提前致谢。
最好的,希望