Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / El árbol de análisis, make y made / Exercises / Invierta las palabras
Solución: Invierta las palabras
Aquí tienes una posible solución para la tarea.
Código
grammar Phrase {
token TOP { <word> [ ' ' <word> ]* { make $<word>».made.join(' ') } }
token word { \w+ { make $/.flip } }
}
say Phrase.parse('hello world').made;🦋 Puedes encontrar el código fuente en el archivo reverse-the-words.raku.
Salida
olleh dlrowComentarios
Cada token
wordproduce su propio texto invertido: su bloque en línea se ejecuta cada vez que una palabra coincide, ymake $/.flipguarda la palabra —$/es la coincidencia actual — escrita al revés.TOPempareja las palabras con<word> [ ' ' <word> ]*— una palabra, después cualquier número de «espacio y palabra» — y las combina.$<word>es la lista de todas las coincidencias de palabra;».madeextrae el texto invertido que guardó cada una, y.join(' ')reconstruye la frase con espacios.Esa forma de «elemento, después elemento, después elemento…» es lo bastante común como para tener un atajo: el separador
%. Escribir<word>+ % ' 'significa «uno o más<word>, separados por un espacio», y empareja exactamente las mismas frases que<word> [ ' ' <word> ]*, solo que de forma más compacta.Así que aquí
makeymadetrabajan en dos niveles: las piezas pequeñas producen sus valores y el todo se produce a partir de ellas. Leer.madesobre el resultado daolleh dlrow.