Курс Raku / Регулярні вирази та граматики / Граматики / Граматики, класи та успадкування / Вправи / Число з proto
Розв’язання: Число з proto
Ось одне з можливих розв’язань задачі.
Код
grammar Number {
token TOP { <number> }
proto token number {*}
token number:sym<dec> { \d+ }
token number:sym<hex> { '0x' <[0..9a..f]>+ }
}
say Number.parse('0xff').defined;🦋 Знайдіть програму у файлі proto-number.raku.
Вивід
TrueКоментарі
Прототокен
numberмає два варіанти:decтаhex.Для
0xffваріантdecзіставляється лише з початковим0, після чого залишилося бxff; варіантhexзіставляється з усім рядком. Тому за правилом найдовшого токена обираєтьсяhex, і рядок розбирається. Та сама граматика й далі приймає звичайне десяткове число на кшталт42.