Курс языка программирования 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


💪 Или перейдите сразу к упражнениям этого раздела.