Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / De parseboom, make en made / Exercises / Keer de woorden om
Oplossing: Keer de woorden om
Hier is een mogelijke oplossing voor de taak.
Code
grammar Phrase {
token TOP { <word> [ ' ' <word> ]* { make $<word>».made.join(' ') } }
token word { \w+ { make $/.flip } }
}
say Phrase.parse('hello world').made;🦋 Je kunt de broncode vinden in het bestand reverse-the-words.raku.
Uitvoer
olleh dlrowOpmerkingen
Elk token
wordmaakt zijn eigen omgekeerde tekst: zijn inline blok draait telkens wanneer een woord matcht, enmake $/.flipbewaart het woord —$/is de huidige match — achterstevoren gespeld.TOPmatcht de woorden met<word> [ ' ' <word> ]*— één woord, dan een willekeurig aantal keren “spatie plus woord” — en combineert ze.$<word>is de lijst met elke woordmatch;».madehaalt de omgekeerde tekst eruit die elk bewaard heeft, en.join(' ')bouwt de woordgroep met spaties weer op.Die vorm van “item, dan item, dan item…” komt vaak genoeg voor om een afkorting te hebben: de scheider
%.<word>+ % ' 'schrijven betekent “een of meer<word>, gescheiden door een spatie”, en matcht precies dezelfde woordgroepen als<word> [ ' ' <word> ]*— alleen compacter.makeenmadewerken hier dus op twee niveaus: de kleine stukjes maken hun waarden, en het geheel wordt daaruit gemaakt..madeop het resultaat lezen geeftolleh dlrow.