Parsekit: как сопоставить отдельные символы цитаты? - PullRequest
2 голосов
/ 22 января 2012

При использовании парсера Parsekit для iPhone.Можно ли включить против двойной кавычки?А вещи, которые являются частью специального BNF?(Возможно ли избежать последовательностей в определенном грамматике?)

@start = doublequote+;
doublequote= '"'

1 Ответ

2 голосов
/ 23 января 2012

Разработчик ParseKit здесь.

По умолчанию вы можете легко сопоставлять строки в кавычках с помощью встроенного парсера QuotedString (который будет соответствовать QuotedString токенам):

@start = quotes;
quotes = QuotedString+;

это будет соответствовать вводу как: "foo" 'bar' "baz"

как три строки в кавычках: "foo", 'bar', "baz"

Таким образом, это демонстрирует, что по умолчанию токенайзер ParseKit (PKTokenizer class) создает QuotedString токенов при обнаружении " или '.

Подробнее о поведении токенизатора по умолчанию читайте в документации ParseKit о токенизации .


Однако, если вы хотите, чтобы символы кавычек (", ') распознавались как отдельные символы вместо указания начала или конца строки в кавычках , вы должны сначала изменить поведение токенайзера.

В коде вы изменили бы поведение токенайзера, вызвав методы для вашего PKTokenizer объекта.

В грамматиках вы изменили поведение токенайзера с помощью директивы токенизатора .

Директивы токенизатора - это особые правила, размещаемые в верхней части грамматики и начинающиеся с символа @.В этом случае вы хотите изменить, какие символы распознаются токенайзером как отдельные символьные токены .В частности, вы хотите добавить два символа в виде символов с помощью директивы токенизатора @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, "

...