Курс языка программирования 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

Комментарии

  1. У proto-токена number два варианта: dec и hex.

  2. Для 0xff вариант dec сопоставил бы только начальный 0, оставив xff не разобранным; вариант hex сопоставляет всё целиком. По правилу самого длинного токена выбирается hex, и строка разбирается. Та же грамматика по-прежнему принимает и обычное десятичное число, например 42.

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

Число с proto   |   Булево значение с proto