Курс по Raku / Регулярни изрази и граматики / Граматики / Създаване на граматики / Exercises / Разберете час

Решение: Разберете час

Ето едно възможно решение на задачата.

Код

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> върху съвпадението. Добавянето на трета част е само още един токен и още едно двоеточие — граматиката се мащабира естествено.

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

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