Курс языка программирования Raku / Регулярные выражения и грамматики / Грамматики / Токены и правила

regex, token и rule

Эти три ключевых слова надстраиваются одно над другим:

  • regex — возвращается назад, как шаблоны в / … /
  • tokenне возвращается назад
  • rule — как token, но пробелы в шаблоне значимы

Возврат назад означает, что, когда более поздняя часть шаблона не срабатывает, движок отступает и пробует более короткое совпадение для более ранней части. regex так и делает:

my regex r { \w+ 'b' }
say so 'aaab' ~~ / <r> /; # True

Сначала \w+ захватывает всё aaab, а затем вынужден отдать последнюю b, чтобы совпал буквальный b. token же ничего отдавать не станет:

my token t { \w+ 'b' }
say so 'aaab' ~~ / <t> /; # False

Здесь \w+ забирает всё aaab, буквальному b ничего не остаётся, и токен просто не срабатывает, вместо того чтобы вернуться назад.

Это звучит как ограничение, но для грамматик именно это и нужно: каждый токен должен сопоставлять одну чистую вещь и не отступать от неё. Так разбор идёт быстрее, а результат становится предсказуемым. По умолчанию используйте token; к regex обращайтесь лишь в тех редких случаях, когда возврат назад вам действительно нужен.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Токены и правила   |   Тест — Возврат


💪 Или перейдите сразу к упражнениям этого раздела.