Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / L’albero di analisi, make e made / Exercises / Invertite le parole
Soluzione: Invertite le parole
Ecco una possibile soluzione del compito.
Codice
grammar Phrase {
token TOP { <word> [ ' ' <word> ]* { make $<word>».made.join(' ') } }
token word { \w+ { make $/.flip } }
}
say Phrase.parse('hello world').made;🦋 Trova il programma nel file reverse-the-words.raku.
Output
olleh dlrowCommenti
Ogni token
wordproduce il proprio testo rovesciato: il suo blocco in linea gira ogni volta che una parola corrisponde, emake $/.flipconserva la parola —$/è la corrispondenza corrente — scritta all’indietro.TOPriconosce le parole con<word> [ ' ' <word> ]*— una parola, poi un numero qualunque di «spazio poi parola» — e le combina.$<word>è l’elenco di ogni corrispondenza di parola;».madene estrae il testo rovesciato conservato da ciascuna, e.join(' ')ricostruisce la frase con gli spazi.Quella forma «elemento, poi elemento, poi elemento…» è abbastanza comune da avere una scorciatoia: il separatore
%. Scrivere<word>+ % ' 'significa «uno o più<word>, separati da uno spazio», e riconosce esattamente le stesse frasi di<word> [ ' ' <word> ]*, solo in modo più compatto.Quindi qui
makeemadelavorano su due livelli: i pezzi piccoli producono i propri valori, e il tutto viene prodotto a partire da essi. Leggere.madesul risultato dàolleh dlrow.