Parsekit: comment faire correspondre des guillemets individuels?

Lors de l'utilisation de l'parsingur Parskit pour l'iPhone. Est-il possible d'inclure dans une double citation? Et les choses qui font partie de la BNF spéciale? (Est-il possible d'échapper des séquences dans un grammer défini?)

@start = doublequote+; doublequote= '"' 

Développeur de ParseKit ici.

Par défaut, vous pouvez facilement faire correspondre les strings entre guillemets à l'aide de l'parsingur QuotedSsortingng (qui correspondra QuotedSsortingng jetons QuotedSsortingng ):

 @start = quotes; quotes = QuotedSsortingng+; 

cela correspondrait à l'input comme: "foo" 'bar' "baz"

comme trois cordes citées: "foo" , 'bar' , "baz"

Cela montre que, par défaut, le tokenizer ParseKit (la class PKTokenizer ) produit des jetons QuotedSsortingng quand il rencontre un " or ' .

Pour plus de détails sur le comportement du tokenizer par défaut, lisez la documentation de tokenization ParseKit .


Toutefois, si vous voulez que les guillemets ( " , ' ) soient reconnus comme des symboles autonomes plutôt que d'indiquer le début ou la fin d'une string entre guillemets , vous devez d'abord modifier le comportement du jeton.

Dans le code, vous modifieriez le comportement des jetons en appelant des methods sur votre object PKTokenizer .

Dans les grammaires, vous modifiez le comportement des jetons avec les directives tokenizer .

Les directives Tokenizer sont des règles spéciales placées en haut de votre grammaire et commençant par un caractère @ . Dans ce cas, vous souhaitez modifier les caractères reconnus comme jetons de symboles autonomes par le tokenizer. Plus précisément, vous souhaitez append deux caractères en tant que symboles avec la directive @symbolState tokenizer.

Vous pouvez le faire dans votre grammaire en le changeant en:

 @symbolState = '"' "'"; // a tokenizer directive stating ' and " should be recognized as standalone symbol tokens // (by default they are start- and end-markers for quoted ssortingng tokens) @start = stuff; stuff = (Word | Symbol)+; 

Étant donné la même input que ci-dessus, vous devez associer des symboles et des mots séparés: " , foo , " , ' , bar , ' , " , baz , "