Курс Raku / Регулярні вирази та граматики / Граматики / Дерево розбору, make і made / Вправи / Переверніть порядок слів
Розв’язання: Переверніть порядок слів
Ось одне з можливих розв’язань задачі.
Код
grammar Phrase {
token TOP { <word> [ ' ' <word> ]* { make $<word>».made.join(' ') } }
token word { \w+ { make $/.flip } }
}
say Phrase.parse('hello world').made;🦋 Знайдіть програму у файлі reverse-the-words.raku.
Вивід
olleh dlrowКоментарі
Кожен токен
wordстворює власний перевернутий текст: його вбудований блок виконується щоразу, коли слово зіставляється, аmake $/.flipзберігає слово —$/є поточним збігом — записане навпаки.TOPзіставляється зі словами за допомогою<word> [ ' ' <word> ]*— одне слово, а потім будь-яка кількість «пробіл, потім слово» — і поєднує їх.$<word>є списком усіх збігів слів;».madeвитягає перевернутий текст, збережений кожним із них, а.join(' ')відбудовує фразу з пробілами.Форма «елемент, потім елемент, потім елемент…» трапляється достатньо часто, щоб мати скорочення: розділювач
%. Запис<word>+ % ' 'означає «одне або більше<word>, розділених пробілом» і зіставляється точно з тими самими фразами, що й<word> [ ' ' <word> ]*, — просто компактніше.Тож
makeтаmadeпрацюють тут на двох рівнях: дрібні шматки створюють свої значення, а ціле створюється з них. Читання.madeна результаті даєolleh dlrow.