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 dlrow

Komentāri

  1. Katrs marķieris word izveido savu apgriezto tekstu: tā iekšējais bloks izpildās ikreiz, kad vārds sakrīt, un make $/.flip saglabā vārdu — $/ ir pašreizējā sakritība — uzrakstītu no otra gala.

  2. TOP piemeklē 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; ».made izvelk apgriezto tekstu, ko katra saglabājusi, un .join(' ') atkal uzbūvē frāzi ar atstarpēm.

  3. Šī «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.

  4. Tātad make un made šeit strādā divos līmeņos: mazie gabali izveido savas vērtības, un veselums tiek izveidots no tām. Nolasot .made uz rezultāta, iegūstam olleh dlrow.

Kursa navigācija

Apgrieziet vārdu secību   |   Darbību klases