Курс Raku / Регулярні вирази та граматики / Граматики / Класи дій / Вправи / Одна граматика, два класи дій
Розв’язання: Одна граматика, два класи дій
Ось одне з можливих розв’язань задачі.
Код
grammar Pair {
token TOP { <a> ',' <b> }
token a { \d+ }
token b { \d+ }
}
class Sum { method TOP($/) { make $<a>.Int + $<b>.Int } }
class Diff { method TOP($/) { make $<a>.Int - $<b>.Int } }
say Pair.parse('10,20', actions => Sum.new).made;
say Pair.parse('10,20', actions => Diff.new).made;🦋 Знайдіть програму у файлі two-actions.raku.
Вивід
30
-10Коментарі
Граматика описує лише форму
число,число; вона нічого не знає про те, що саме обчислювати.Два класи дій прикріплюють до того самого розбору різні значення — один додає числа, другий віднімає. Достатньо передати в
.parseінший об’єктactions, щоб отримати інший результат, і граматику при цьому взагалі не змінюють.
Навігація курсом
← Одна граматика, два класи дій | Зробіть дату зрозумілою людині →