排除 Unicode 类别中的某些字符
Exclude some characters in Unicode category
我正在尝试按照 "all characters in the Letter and Symbol Unicode categories except a few reserved characters." 从 lexer rules 实施规则,我知道我可以使用 \p{___}
来匹配 Unicode 类别,但我不确定如何处理排除某些字符。
查看示例语法,我被引导到几个不同的方向。例如,Java 9 grammar seems to use predicates in order to directly use Java's built in isJavaIdentifier()
while others 手动定义每个有效字符。
如何实现此功能?
如果没有目标特定代码,您将必须自己定义范围,以便您要排除的字符不属于这些范围。您不能使用 \p{...}
然后从中排除某些字符。
使用特定于目标的代码,您可以按照 Java 9 语法进行操作:
@lexer::members {
boolean aCustomMethod(int character) {
// Your logic to see if 'character' is valid. You're sure
// that it's at least a char from \p{Letter} or \p{Symbol}
return true;
}
}
TOKEN
: [\p{Letter}\p{Symbol}] {aCustomMethod(_input.LA(-1))}?
;
我正在尝试按照 "all characters in the Letter and Symbol Unicode categories except a few reserved characters." 从 lexer rules 实施规则,我知道我可以使用 \p{___}
来匹配 Unicode 类别,但我不确定如何处理排除某些字符。
查看示例语法,我被引导到几个不同的方向。例如,Java 9 grammar seems to use predicates in order to directly use Java's built in isJavaIdentifier()
while others 手动定义每个有效字符。
如何实现此功能?
如果没有目标特定代码,您将必须自己定义范围,以便您要排除的字符不属于这些范围。您不能使用 \p{...}
然后从中排除某些字符。
使用特定于目标的代码,您可以按照 Java 9 语法进行操作:
@lexer::members {
boolean aCustomMethod(int character) {
// Your logic to see if 'character' is valid. You're sure
// that it's at least a char from \p{Letter} or \p{Symbol}
return true;
}
}
TOKEN
: [\p{Letter}\p{Symbol}] {aCustomMethod(_input.LA(-1))}?
;