Курс языка программирования 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 тест по содержанию этой темы.
Навигация по курсу
← Токены и правила | Тест — Возврат →
💪 Или перейдите сразу к упражнениям этого
раздела.