使用 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
,"