Курс Raku / Регулярні вирази та граматики / Граматики / Класи дій

Написання класу дій

Клас дій — це звичайний клас з одним методом на кожен токен граматики. Кожен метод отримує збіг для свого токена як $/ і викликає make, щоб прикріпити значення, — рівно те саме, що робив вбудований блок, але окремо від шаблону:

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 }
}

Тепер граматика містить лише шаблон; уся семантика живе в SumActions. Зверніть увагу, як методи співпрацюють: a та b створюють кожен своє ціле число, а TOP читає їх через $<a>.made та $<b>.made і створює їхню суму.

Щоб скористатися класом дій, передайте його примірник у .parse через іменований аргумент actions, а потім прочитайте верхній результат через .made:

say Sum.parse('2+3', actions => SumActions.new).made; # 5

Поки граматика розбирає текст, метод кожного токена виконується автоматично й будує значення знизу вгору. Результат на верхньому збігу і є потрібним вам значенням — тут це число 5.

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Класи дій   |   Тест — make


💪 Або перейдіть одразу до вправ цього розділу.