Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Parsēšanas koks, make un made / Exercises / Apgrieziet vārdu secību
Risinājums: Apgrieziet vārdu secību
Šeit ir iespējams risinājums uzdevumam.
Kods
grammar Phrase {
token TOP { <word> [ ' ' <word> ]* { make $<word>».made.join(' ') } }
token word { \w+ { make $/.flip } }
}
say Phrase.parse('hello world').made;🦋 Atrodiet programmu failā reverse-the-words.raku.
Izvade
olleh dlrowKomentāri
Katrs marķieris
wordizveido savu apgriezto tekstu: tā iekšējais bloks izpildās ikreiz, kad vārds sakrīt, unmake $/.flipsaglabā vārdu —$/ir pašreizējā sakritība — uzrakstītu no otra gala.TOPpiemeklē vārdus ar<word> [ ' ' <word> ]*— viens vārds, tad jebkurš skaits «atstarpe, tad vārds» — un tos apvieno.$<word>ir katras vārda sakritības saraksts;».madeizvelk apgriezto tekstu, ko katra saglabājusi, un.join(' ')atkal uzbūvē frāzi ar atstarpēm.Šī «elements, tad elements, tad elements…» forma ir pietiekami izplatīta, lai tai būtu saīsinājums: atdalītājs
%. Rakstot<word>+ % ' ', tas nozīmē «viens vai vairāki<word>, atdalīti ar atstarpi», un tas piemeklē tieši tās pašas frāzes, ko<word> [ ' ' <word> ]*, tikai kompaktāk.Tātad
makeunmadešeit strādā divos līmeņos: mazie gabali izveido savas vērtības, un veselums tiek izveidots no tām. Nolasot.madeuz rezultāta, iegūstamolleh dlrow.