Курс языка программирования 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 →
💪 Или перейдите сразу к упражнениям этого
раздела.