为iPhone使用解析器Parsekit时。是否可以包含双引号?还有特殊BNF的一部分? (是否可以在定义的语法中转义序列?)
@start = doublequote+;
doublequote= '"'
答案 0 :(得分:2)
ParseKit的开发人员。
默认情况下,您可以使用内置的QuotedString
解析器(匹配QuotedString
令牌)轻松匹配带引号的字符串:
@start = quotes;
quotes = QuotedString+;
匹配输入,例如:"foo" 'bar' "baz"
作为三个引用的字符串:"foo"
,'bar'
,"baz"
因此,这表明默认情况下,当遇到PKTokenizer
或QuotedString
时,ParseKit标记生成器("
类)会生成'
标记。
有关默认令牌化程序行为的更多详细信息,请阅读ParseKit tokenization documentation。
但是,如果您希望引号字符("
,'
)被识别为独立符号,而不是指示引用字符串的开头或结尾,您必须首先更改标记生成器行为。
在代码中,您可以通过调用PKTokenizer
对象上的方法来更改tokenizer行为。
在语法中,您可以使用 tokenizer指令更改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
,{ {1}},'
,"
,baz