Курс Raku / Регулярні вирази та граматики / Граматики / Токени та правила
Значущі пробіли у правилах
rule — це token з однією додатково
увімкненою можливістю: :sigspace (значущий пробіл), тобто
рівно прислівник :s. Він перетворює пробіли, які ви пишете
в шаблоні, на автоматичне зіставлення з пробільними символами між
частинами. Саме це вам потрібно щоразу, коли текст, який ви розбираєте,
має пробіли між своїми шматками.
Порівняймо обидва варіанти. У token пробіли в шаблоні
ігноруються, тож
<first> <second> вимагає, щоб дві частини
стояли без нічого між ними. Оскільки \w+ зупиняється на
пробілі, вхід із пробілом не дає збігу:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalseПрийняти пробіл у token можна — просто вам
доведеться зіставитися з ним самотужки, наприклад за допомогою
\s+:
token TOP { <first> \s+ <second> } # тепер 'foo bar' розбираєтьсяrule вставляє це зіставлення з пробілами за вас, тож
достатньо просто написати пробіл між частинами:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueПоширений підхід — використовувати rule для структури
вищого рівня, де частини розділені пробілами, і token для
дрібних шматків на кшталт імен та чисел, які пробілів не містять. Це
робить вашу граматику і правильною, і легкою для читання.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — Повернення | Тест — Токени та правила →
💪 Або перейдіть одразу до вправ цього
розділу.