如何指定需要在Antlr中使用四个以上十六进制数字的unicode文字?

如何指定需要在Antlr中使用四个以上十六进制数字的unicode文字?,unicode,antlr,antlr4,lexical-analysis,unicode-literals,Unicode,Antlr,Antlr4,Lexical Analysis,Unicode Literals,我想为unicode字符之间的范围定义一个lexer规则,这些字符的代码点需要四个以上的十六进制数字才能识别。具体来说,我想声明以下规则: ID_Continue : [\uE0100-\uE01EF] ; 不幸的是,它不起作用。此规则将匹配不在此范围内的字符。(我不确定这会导致什么样的行为,但这不是我想要的。)我还尝试了以下方法(用前导零填充,并使用8位数字): 但这似乎导致了同样的不受欢迎的行为 我正在使用Antlr4和IntelliJ插件进行测试 Antlr4是否不支持上面的unicod

我想为unicode字符之间的范围定义一个lexer规则,这些字符的代码点需要四个以上的十六进制数字才能识别。具体来说,我想声明以下规则:

ID_Continue : [\uE0100-\uE01EF] ;
不幸的是,它不起作用。此规则将匹配不在此范围内的字符。(我不确定这会导致什么样的行为,但这不是我想要的。)我还尝试了以下方法(用前导零填充,并使用8位数字):

但这似乎导致了同样的不受欢迎的行为

我正在使用Antlr4和IntelliJ插件进行测试


Antlr4是否不支持上面的unicode文本
\uFFFF

否,ANTLR的最大值与Java的相同

如果你看一看(部分),你会看到这些规则:

// Any kind of escaped character that we can embed within ANTLR literal strings.
fragment EscSeq
    :   Esc
        ( [btnfr"'\\]   // The standard escaped character set such as tab, newline, etc.
        | UnicodeEsc    // A Unicode escape sequence
        | .             // Invalid escape character
        | EOF           // Incomplete at EOF
        )
    ;

...

fragment UnicodeEsc
    :   'u' (HexDigit (HexDigit (HexDigit HexDigit?)?)?)?
    ;

...

fragment Esc : '\\' ;

注意:对BMP的限制纯粹是Java限制。其他目标可能更进一步。例如,为ANTLR3(C目标)编写的代码可以很容易地从BMP以外的地方使用例如emojis。这适用于带引号的字符串和标识符


然而,这里有点奇怪的是,我没有在语法中指定这个范围(它只使用BMP)。解析器仍然可以解析任何utf-8输入。可能是目标运行时中的一个bug,尽管我很高兴它存在:-D

我确实查看了那里,但我想绝对确定。非常感谢。
// Any kind of escaped character that we can embed within ANTLR literal strings.
fragment EscSeq
    :   Esc
        ( [btnfr"'\\]   // The standard escaped character set such as tab, newline, etc.
        | UnicodeEsc    // A Unicode escape sequence
        | .             // Invalid escape character
        | EOF           // Incomplete at EOF
        )
    ;

...

fragment UnicodeEsc
    :   'u' (HexDigit (HexDigit (HexDigit HexDigit?)?)?)?
    ;

...

fragment Esc : '\\' ;