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