Курс по 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 тест върху съдържанието на тази тема.

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

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


💪 Или преминете направо към упражненията в този раздел.