Курс языка программирования Raku / Регулярные выражения и грамматики / Грамматики / Грамматики, классы и наследование / Exercises / Булево значение с proto
Решение: Булево значение с proto
Вот один из возможных вариантов решения задачи.
Код
grammar Bool {
token TOP { <bool> }
proto token bool {*}
token bool:sym<true> { 'true' }
token bool:sym<false> { 'false' }
}
say Bool.parse('true').defined;
say Bool.parse('false').defined;
say Bool.parse('unknown').defined;🦋 Исходный код можно найти в файле proto-bool.raku.
Вывод
True
True
FalseКомментарии
У proto-токена
boolдва именованных варианта:trueиfalse.Каждый разбор выбирает подходящий вариант, поэтому и
'true', и'false'проходят успешно. Proto-токен — принятый в грамматиках аккуратный способ сказать «одна из вот этих именованных альтернатив».'unknown'не подходит ни под один вариант, поэтому proto-токену не на что диспетчеризовать и разбор не удаётся —False. Proto принимает ровно те альтернативы, которые вы перечислили, и ничего сверх того.