Курс 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」

Коментарі

  1. TOP описує весь час як три токени, розділені двокрапками. Кожна частина — це \d ** 2, тобто рівно дві цифри, а не необмежений \d+, тож хибно сформоване значення на кшталт 09:30:456 відхиляється. (Якщо частина може бути без ведучого нуля, як година в 9:30:45, напишіть \d ** 1..2, щоб дозволити одну або дві цифри.)

  2. Після розбору кожен токен є іменованим захопленням, тож секунди читають як <second> на збігу. Додати третю частину — це лише ще один токен і ще одна двокрапка: граматика природно масштабується.

Навігація курсом

Розберіть час   |   Токени та правила