2

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

@start = doublequote+;
doublequote= '"'
4

1 回答 1

2

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

于 2012-01-23T03:53:29.507 回答