我正在尝试为简体中文标识符构建一个令牌。
简体中文标识符在规范中定义如下:
simplified-Chinese-identifier = first-sChinese-identifier-character *subsequent-sChinese-identifier-character
first-sChinese-identifier-character = (first-Latin-identifier-character / CP936-initialcharacter)
subsequent-sChinese-identifier-character = (subsequent-Latin-identifier-character / CP936-
subsequent-character)
CP936-initial-character = < character ranges specified in section 3.3.5.1.3>
CP936-subsequent-character = < character ranges specified in section 3.3.5.1.3>
这是UNICODE-BESTFIT和Windows Codepage 936。
例如,我所做的是%xA3C1
在页面中查找,然后获取其对应的代码,即0xff21
. %xA3C1
因此,我找到了, %xA3DA
, %xA3E1
, %xA3FA
, %xA1A2
, %xA1AA
, %xA1AC
, %xA1AD
, %xA1B2
,的相应代码%xA1E6
;%xA1E8
, %xA1EF
, %xA2B1
, %xA2FC
, %xA4A1
, %xFE4F
, 和构建CP936-initial-character
如下:
let cP936_initial_character = [%sedlex.regexp? 0xff21 .. 0xff3a | 0xff41 .. 0xff5a | 0x3001 .. 0x2014 | 0x2016 .. 0x2026 | 0x3014 .. 0x2103 | 0x00a4 .. 0x2605 | 0x2488 .. 0x216b | 0x3041 .. 0xfa29]
但是,问题在于,例如,某些范围看起来很奇怪,0x00a4 .. 0x2605
并且0x2488 .. 0x216b
顺序不正确;而且0x3041 .. 0xfa29
看起来太大了。
有谁知道构建这个令牌的正确方法是什么?