【问题标题】:Parsekit: how to match individual quote characters?Parsekit:如何匹配单个引号字符?
【发布时间】:2012-01-22 14:39:56
【问题描述】:

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

@start = doublequote+;
doublequote= '"'

【问题讨论】:

    标签: iphone objective-c ios parsekit


    【解决方案1】:

    这里是 ParseKit 的开发者。

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

    @start = quotes;
    quotes = QuotedString+;
    

    将匹配如下输入:"foo" 'bar' "baz"

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

    因此这表明默认情况下 ParseKit 标记器(PKTokenizer 类)在遇到 "' 时会生成 QuotedString 标记。

    有关默认标记器行为的更多详细信息,请阅读ParseKit tokenization documentation


    但是,如果您希望引号字符("')被识别为独立的符号,而不是指示引用字符串的开始或结束 ,你必须先改变分词器的行为。

    在代码中,您可以通过调用 PKTokenizer 对象上的方法来更改标记器行为。

    在语法中,您可以使用 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'"baz , "

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多