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

Решение: Присвояване с интервали

Ето едно възможно решение на задачата.

Код

grammar Assign {
    rule TOP    { <key> '=' <value> }
    token key   { \w+ }
    token value { \w+ }
}

say Assign.parse('x = 5').defined;

🦋 Намерете програмата във файла spaced-assignment.raku.

Изход

True

Коментари

  1. Понеже TOP е rule, интервалите в шаблона позволяват празни знаци около = във входа.

  2. Затова 'x = 5' се разбира. Ако TOP беше token, щеше да съвпадне само 'x=5'.

Интервалите, които rule позволява, са незадължителни, а не задължителни: значещият интервал съпоставя нула интервала също толкова радушно, колкото и един, така че формата без интервали също се разбира:

say Assign.parse('x=5').defined; # True

Затова rule приема еднакво 'x = 5', 'x=5' и дори 'x =5' — гъвкавост, без да се разписва къде точно може и къде не може да има интервал.

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

Присвояване с интервали   |   Граматики, класове и наследяване