Parsekit:如何匹配单个引号字符?

时间:2012-01-22 14:39:56

标签: iphone objective-c ios parsekit

为iPhone使用解析器Parsekit时。是否可以包含双引号?还有特殊BNF的一部分? (是否可以在定义的语法中转义序列?)

@start = doublequote+;
doublequote= '"'

1 个答案:

答案 0 :(得分:2)

ParseKit的开发人员。

默认情况下,您可以使用内置的QuotedString解析器(匹配QuotedString令牌)轻松匹配带引号的字符串:

@start = quotes;
quotes = QuotedString+;

匹配输入,例如:"foo" 'bar' "baz"

作为三个引用的字符串:"foo"'bar'"baz"

因此,这表明默认情况下,当遇到PKTokenizerQuotedString时,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