Курс по 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」Коментари
TOPописва целия час като три токена, разделени с двоеточия. Всяка част е\d ** 2— точно две цифри, — а не отворено\d+, така че неправилно оформена стойност като09:30:456се отхвърля. (Ако някоя част може да е без водеща нула, като часа в9:30:45, напишете\d ** 1..2, за да позволите една или две цифри.)След разбора всеки токен е именувано прихващане, така че секундите се четат като
<second>върху съвпадението. Добавянето на трета част е само още един токен и още едно двоеточие — граматиката се мащабира естествено.