Курс Raku / Регулярні вирази та граматики / Граматики / Класи дій
Вбудовані дії та класи дій
Тепер у вас є два способи прикріпити семантику до розбору. Який із них використовувати?
Вбудовані дії ставлять блок { make … }
просто всередині токена:
grammar Sum {
token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
token a { \d+ }
token b { \d+ }
}Їх швидко писати, і вони цілком годяться для крихітної граматики чи одноразового скрипту. Ціна в тому, що шаблон і логіка переплітаються між собою.
Клас дій тримає їх нарізно — граматика описує форму, клас дій описує значення:
grammar Sum {
token TOP { <a> '+' <b> }
token a { \d+ }
token b { \d+ }
}
class SumActions {
method TOP($/) { make $<a>.made + $<b>.made }
method a($/) { make $/.Int }
method b($/) { make $/.Int }
}Цей поділ дає справжні переваги, коли граматика росте: шаблон залишається зрозумілим, і ви можете поєднувати одну граматику з кількома класами дій — одним, що обчислює, другим, що гарно друкує, третім, що будує структуру даних, — узагалі не торкаючись граматики.
Правило великого пальця: вбудовані дії — для чогось дрібного й одноразового, клас дій — для всього, що ви супроводжуватимете чи використовуватимете повторно.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — make | Тест — Класи дій →
💪 Або перейдіть одразу до вправ цього
розділу.