Ragel 和 NSMutableString

Ragel and NSMutableString

是否可以让 Ragel 在 NSMutableString 上工作?

我想使用 Ragel 生成 DFA 来标记 NSMutableString。 "mutable" 部分意味着我不能在单个字符更改时使用 cStringUsingEncoding: 。据我所知,有两个问题:

  1. Ragel 中包含的示例似乎使用 char * 来获取字符,即使在 Objective C 中也是如此。但我不知道如何获得指向不断变化的 NSMutableString 的指针。是否有可能强制 Ragel 使用 characterAtIndex: 来代替?会不会很慢?

  2. 如果我理解正确,NSString 可能会在运行时更改其内部表示,即它并不总是 UTF-16。例如,当它只包含 ASCII 时,它使用单字节编码。但是一旦出现超出有效范围的字符,它就会切换到多字节编码。是否有可能在 Ragel 中解释这一点?

在我的脑海中,我会直接使用 CFStringRef,因为它有 CFStringCreateMutableWithExternalCharactersNoCopy,它允许您声明自己的缓冲区并明确禁用您正在谈论的优化.

此外,如果您 externalCharactersAllocator 设置正确,您甚至可能受益于免费电话桥接(尽管 可能 不起作用),所以它不会得到对于任何改变字符串的东西来说太乱了。