Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Actieklassen / Exercises / Eén grammatica, twee actieklassen
Oplossing: Eén grammatica, twee actieklassen
Hier is een mogelijke oplossing voor de taak.
Code
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;🦋 Je kunt de broncode vinden in het bestand two-actions.raku.
Uitvoer
30
-10Opmerkingen
De grammatica beschrijft alleen de vorm
getal,getal; ze weet niets over wat er berekend moet worden.De twee actieklassen hangen verschillende betekenissen aan dezelfde parse — de ene telt de getallen op, de andere trekt ze af. Een ander
actions-object aan.parsemeegeven is alles wat nodig is voor een ander resultaat, zonder de grammatica ook maar aan te raken.
Cursusnavigatie
← Eén grammatica, twee actieklassen | Maak een datum leesbaar →