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

regex, token і rule

Ці три ключові слова надбудовуються одне над одним:

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

Відкочування (backtracking) означає, що коли пізніша частина шаблону зазнає невдачі, рушій повертається назад і пробує коротший збіг для попередньої частини. 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 тест за змістом цієї теми.

Навігація курсом

Токени та правила   |   Тест — Повернення


💪 Або перейдіть одразу до вправ цього розділу.