iPhone用のパーサーParsekitを使用する場合。二重引用符に対して含めることは可能ですか? そして、特別な BNF の一部であるものは? (定義された文法でシーケンスをエスケープすることは可能ですか?)
@start = doublequote+;
doublequote= '"'
iPhone用のパーサーParsekitを使用する場合。二重引用符に対して含めることは可能ですか? そして、特別な BNF の一部であるものは? (定義された文法でシーケンスをエスケープすることは可能ですか?)
@start = doublequote+;
doublequote= '"'
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
"