2

iPhone用のパーサーParsekitを使用する場合。二重引用符に対して含めることは可能ですか? そして、特別な BNF の一部であるものは? (定義された文法でシーケンスをエスケープすることは可能ですか?)

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

1 に答える 1

2

ParseKit の開発者はこちら。

デフォルトでは、ビルトインQuotedStringパーサー (QuotedStringトークンと一致します)を使用して、引用符で囲まれた文字列と簡単に一致させることができます。

@start = quotes;
quotes = QuotedString+;

次のような入力に一致します。"foo" 'bar' "baz"

3 つの引用符で囲まれた文字列: "foo", 'bar',"baz"

したがって、これは、デフォルトで ParseKit トークナイザー (PKTokenizerクラス) がまたはQuotedStringに遭遇したときにトークンを生成することを示しています。"'

デフォルトのトークナイザーの動作の詳細については、ParseKit トークン化のドキュメントを参照してください。


"ただし、引用文字 ( , ) を引用文字列の開始または終了を示すのではなく、スタンドアロンのシンボル'として認識させたい場合は、最初にトークナイザーの動作を変更する必要があります。

コードでは、オブジェクトのメソッドを呼び出してトークナイザーの動作を変更しますPKTokenizer

文法では、トークナイザー ディレクティブを使用してトークナイザーの動作を変更します。

トークナイザー ディレクティブ@は、文字で始まる文法の先頭に配置される特別なルールです。この場合、トークナイザーによってスタンドアロンシンボル トークンとして認識される文字を変更する必要があります。具体的には、トークナイザー ディレクティブを使用して 2 つの文字をシンボルとして追加します。@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 に答える