Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Gramatiku veidošana / Exercises / Parsējiet laiku
Risinājums: Parsējiet laiku
Šeit ir iespējams risinājums uzdevumam.
Kods
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>;🦋 Atrodiet programmu failā parse-a-time.raku.
Izvade
「45」Komentāri
TOPapraksta visu laiku kā trīs marķierus, atdalītus ar koliem. Katra daļa ir\d ** 2— tieši divi cipari —, nevis nenoteikts\d+, tāpēc nepareiza vērtība, piemēram,09:30:456, tiek noraidīta. (Ja kāda daļa var būt bez vadošās nulles, piemēram, stunda9:30:45, rakstiet\d ** 1..2, lai atļautu vienu vai divus ciparus.)Pēc parsēšanas katrs marķieris ir nosaukts tvērums, tāpēc sekundi nolasa kā
<second>uz sakritības. Trešās daļas pievienošana ir tikai vēl viens marķieris un vēl viens kols — gramatika mērogojas dabiski.