【发布时间】:2012-01-22 14:39:56
【问题描述】:
使用 iPhone 的解析器 Parsekit 时。是否可以包含双引号?什么是特殊 BNF 的一部分? (是否可以在定义的语法中转义序列?)
@start = doublequote+;
doublequote= '"'
【问题讨论】:
标签: iphone objective-c ios parsekit
使用 iPhone 的解析器 Parsekit 时。是否可以包含双引号?什么是特殊 BNF 的一部分? (是否可以在定义的语法中转义序列?)
@start = doublequote+;
doublequote= '"'
【问题讨论】:
标签: iphone objective-c ios parsekit
这里是 ParseKit 的开发者。
默认情况下,您可以使用内置的 QuotedString 解析器轻松匹配带引号的字符串(它将匹配 QuotedString 标记):
@start = quotes;
quotes = QuotedString+;
将匹配如下输入:"foo" 'bar' "baz"
作为三个引用字符串:"foo"、'bar'、"baz"
因此这表明默认情况下 ParseKit 标记器(PKTokenizer 类)在遇到 " 或 ' 时会生成 QuotedString 标记。
有关默认标记器行为的更多详细信息,请阅读ParseKit tokenization documentation。
但是,如果您希望引号字符("、')被识别为独立的符号,而不是指示引用字符串的开始或结束 ,你必须先改变分词器的行为。
在代码中,您可以通过调用 PKTokenizer 对象上的方法来更改标记器行为。
在语法中,您可以使用 tokenizer 指令 更改标记器行为。
Tokenizer 指令 是放置在语法顶部的特殊规则,以 @ 字符开头。在这种情况下,您希望更改标记器将哪些字符识别为独立的符号标记。具体来说,您希望使用@symbolState tokenizer 指令添加两个字符作为符号。
您可以在语法中将其更改为:
@symbolState = '"' "'"; // a tokenizer directive stating ' and " should be recognized as standalone symbol tokens
// (by default they are start- and end-markers for quoted string tokens)
@start = stuff;
stuff = (Word | Symbol)+;
如果输入与上述相同,您将匹配单独的引号符号和单词:"、foo、"、'、bar、'、"、baz , "
【讨论】: