Разработчик 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
, "