Курс языка программирования Raku / Регулярные выражения и грамматики / Грамматики / Грамматики, классы и наследование / Exercises / Число с 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Комментарии
У proto-токена
numberдва варианта:decиhex.Для
0xffвариантdecсопоставил бы только начальный0, оставивxffне разобранным; вариантhexсопоставляет всё целиком. По правилу самого длинного токена выбираетсяhex, и строка разбирается. Та же грамматика по-прежнему принимает и обычное десятичное число, например42.