使用 iPhone 的解析器 Parsekit 时。是否可以包含双引号?什么是特殊 BNF 的一部分?(是否可以在定义的语法中转义序列?)
@start = doublequote+;
doublequote= '"'
使用 iPhone 的解析器 Parsekit 时。是否可以包含双引号?什么是特殊 BNF 的一部分?(是否可以在定义的语法中转义序列?)
@start = doublequote+;
doublequote= '"'
ParseKit 的开发者在这里。
默认情况下,您可以使用内置QuotedString解析器轻松匹配带引号的字符串(它将匹配QuotedString标记):
@start = quotes;
quotes = QuotedString+;
这将匹配输入,如:"foo" 'bar' "baz"
作为三个带引号的字符串:"foo", 'bar',"baz"
因此,这表明默认情况下 ParseKit 标记器(PKTokenizer类)QuotedString在遇到 a"或时会生成标记'。
有关默认标记器行为的更多详细信息,请阅读ParseKit 标记化文档。
但是,如果您希望引号字符 ( ", ') 被识别为独立符号,而不是指示引号字符串的开始或结束,则必须首先更改标记器行为。
在代码中,您可以通过调用PKTokenizer对象上的方法来更改标记器行为。
在语法中,您可以使用标记器指令更改标记器行为。
标记器指令是放置在语法顶部的特殊规则,以@字符开头。在这种情况下,您希望更改标记器将哪些字符识别为独立符号标记。具体来说,您希望使用tokenizer 指令添加两个字符作为符号。@symbolState
您可以通过将其更改为:
@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,"