Курс Raku / Регулярні вирази та граматики / Граматики / Граматики, класи та успадкування
Proto-токени та альтернативи
Інколи одне поняття має кілька форм — число може бути цілим або
десятковим. Ви могли б записати альтернативу через |, але
граматики пропонують охайніший спосіб: прототокен з іменованими
варіантами.
Оголосіть загальний токен як proto token, а потім
запишіть кожен варіант як token name:sym<мітка>:
grammar Number {
token TOP { <number> }
proto token number {*}
token number:sym<int> { \d+ }
token number:sym<float> { \d+ '.' \d+ }
}
say Number.parse('42').defined; # True
say Number.parse('3.14').defined; # TrueРядок proto token number {*} каже: «number
— це один із варіантів нижче». Кожен варіант несе мітку
:sym<…>, що дає йому ім’я. Коли граматиці потрібен
<number>, вона пробує варіанти й за правилом
найдовшого токена обирає той, що підходить: int для
42, float для 3.14.
Прототокени читаються краще, ніж довгий ланцюжок альтернатив через
|, а мітки :sym<…> дають кожному випадку
ім’я, на яке можна зважати пізніше, коли ви прикріплюватимете до розбору
семантику. Це ідіоматичний спосіб виразити «один із цих різновидів» у
граматиці.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — Успадкування граматик | Тест — Граматики та успадкування →
💪 Або перейдіть одразу до вправ цього
розділу.