Курс по Raku / Регулярни изрази и граматики / Граматики / Класове за действия / Exercises / Една граматика, два класа за действия
Решение: Една граматика, два класа за действия
Ето едно възможно решение на задачата.
Код
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Коментари
Граматиката описва само формата
число,число; тя не знае нищо за това какво да се изчисли.Двата класа за действия прикачват различно значение към един и същ разбор — единият събира числата, другият ги изважда. Достатъчно е да подадете различен обект
actionsна.parse, за да получите различен резултат, без изобщо да променяте граматиката.
Навигация в курса
← Една граматика, два класа за действия | Направете датата четима за човек →