Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Clases de acción / Exercises / Haga una fecha legible
Solución: Haga una fecha legible
Aquí tienes una posible solución para la tarea.
Código
grammar Date {
token TOP { <year> '-' <month> '-' <day> }
token year { \d ** 4 }
token month { \d ** 2 }
token day { \d ** 2 }
}
class Humanise {
method year($/) { make $/.Int }
method month($/) { make <January February March April May June
July August September October November December>[$/ - 1] }
method day($/) { make $/.Int }
method TOP($/) { make "{$<day>.made} {$<month>.made} {$<year>.made}" }
}
say Date.parse('2026-07-05', actions => Humanise.new).made;🦋 Puedes encontrar el código fuente en el archivo humanise-a-date.raku.
Salida
5 July 2026Comentarios
A diferencia de una simple acción aritmética, los métodos de los tokens producen valores de clases distintas:
yearydayproducen enteros, peromonthproduce una cadena usando su valor numérico como índice en una lista de nombres de mes.$/ - 1convierte en número la coincidencia de dos dígitos (07→7) y pasa a un índice que empieza en cero, así que elmonth07produceJuly.El método
TOPnunca vuelve a examinar el texto en bruto. Solo lee los tres valores que ya produjeron los submétodos —$<day>.made,$<month>.made,$<year>.made— y los interpola en la cadena final. Leer5de vuelta desdedayelimina además gratis el cero inicial.Ese es el trabajo cotidiano de una clase de acciones: analizar una vez la entrada estructurada y dejar después que cada método convierta su propia pieza en lo que el resto del programa necesite.
Navegación del curso
← Haga una fecha legible | Programación funcional, concurrente, reactiva y web →