背景
我正在编写基于DFA的正则表达式解析器,出于性能原因,我需要使用字典[Unicode.Scalar : State]
来映射下一个状态。现在我需要一堆特殊的unicode值来表示特殊字符表达式,如.
,\w
,\d
......
我的问题
哪个unicode值可以安全地用于此目的?
我使用U+0000
作为.
,但我现在需要更多。我检查了unicode文档,Noncharacters似乎很有希望,但是在swift中,那些被认为是无效的unicode。例如,以下代码给出了编译器错误Invalid unicode scalar
。
let c = "\u{FDD0}"
答案 0 :(得分:1)
如果您坚持使用grand_child
,则不执行任何操作。 Unicode.Scalar
旨在表示Unicode中的所有有效字符,包括 not-assigned-yet 代码点。因此,它不能代表非字符,也不能代表悬挂的代理(Unicode.Scalar
也会导致错误)。
在Swift中,"\u{DC00}"
可以包含所有有效的String
,包括Unicode.Scalar
。例如,U+0000
(== "\u{0000}"
)是一个有效的字符串,其长度("\0"
)是1.使用count
作为元字符,您的代码不会使用有效的Swift Strings。
考虑使用U+0000
代替[UInt32: State]
。 Unicode仅使用[Unicode.Scalar: State]
(包括非字符),因此使用大于0x0000...0x10FFFF
的值是安全(以您的意思)。
同样获得0x10FFFF
value
属性需要非常小的成本,并且在优化代码中可以忽略其成本。我不确定使用Unicode.Scalar
确实是处理您的要求的好方法,但Dictionary
与[UInt32: State]
一样有效。