Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Darbību klases / Exercises / Viena gramatika, divas darbību klases

Risinājums: Viena gramatika, divas darbību klases

Šeit ir iespējams risinājums uzdevumam.

Kods

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;

🦋 Atrodiet programmu failā two-actions.raku.

Izvade

30
-10

Komentāri

  1. Gramatika apraksta tikai formu skaitlis,skaitlis; par to, kas jāaprēķina, tā neko nezina.

  2. Abas darbību klases vienam un tam pašam parsējumam piesaista dažādas nozīmes — viena skaitļus saskaita, otra atņem. Lai iegūtu citu rezultātu, pietiek .parse padot citu actions objektu, gramatiku nemaz nemainot.

Kursa navigācija

Viena gramatika, divas darbību klases   |   Padariet datumu cilvēkam saprotamu