我要写的规则是:
Character : '\u0000'..'\u10FFF';
但是尝试对定义了该词法的lexer文件运行antlr工具时,出现以下错误:
multi-character literals are not allowed in lexer sets: '\u10FFF'
如何解决此问题?
答案 0 :(得分:2)
尝试用{
和}
包装多字符文字,并使用v4样式的字符集[...]
:
Character : [\u0000-\u{10FFF}];
来自https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexer-rule-elements:
[...]匹配字符集中指定的字符之一。将
x-y
解释为范围x
和y
之间的一组字符。以下转义字符被解释为单个特殊字符:\n
,\r
,\b
,\t
,\f
,\uXXXX
和{{ 1}}。要获取\u{XXXXXX}
,]
或\
,您必须使用-
对其进行转义。