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