Курс Raku / Регулярні вирази та граматики / Граматики / Створення граматик / Вправи / Розберіть час
Розв’язання: Розберіть час
Ось одне з можливих розв’язань задачі.
Код
grammar Time {
token TOP { <hour> ':' <minute> ':' <second> }
token hour { \d ** 2 }
token minute { \d ** 2 }
token second { \d ** 2 }
}
say Time.parse('09:30:45')<second>;🦋 Знайдіть програму у файлі parse-a-time.raku.
Вивід
「45」Коментарі
TOPописує весь час як три токени, розділені двокрапками. Кожна частина — це\d ** 2, тобто рівно дві цифри, а не необмежений\d+, тож хибно сформоване значення на кшталт09:30:456відхиляється. (Якщо частина може бути без ведучого нуля, як година в9:30:45, напишіть\d ** 1..2, щоб дозволити одну або дві цифри.)Після розбору кожен токен є іменованим захопленням, тож секунди читають як
<second>на збігу. Додати третю частину — це лише ще один токен і ще одна двокрапка: граматика природно масштабується.