Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Actieklassen
Inline-acties tegenover actieklassen
Je hebt nu twee manieren om betekenis aan een parse te hangen. Welke moet je gebruiken?
Inline acties zetten een blok
{ make … } regelrecht binnen het token:
grammar Sum {
token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
token a { \d+ }
token b { \d+ }
}Ze zijn snel geschreven en prima voor een piepkleine grammatica of een eenmalig script. De prijs is dat het patroon en de logica in elkaar verstrengeld raken.
Een actieklasse houdt de twee uit elkaar — de grammatica beschrijft de vorm, de actieklasse beschrijft de betekenis:
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 }
}Deze scheiding heeft echte voordelen naarmate een grammatica groeit: het patroon blijft leesbaar, en je kunt één grammatica met meerdere actieklassen combineren — een die evalueert, een die netjes afdrukt, een die een gegevensstructuur bouwt — zonder de grammatica aan te raken.
De vuistregel: inline acties voor iets kleins en wegwerpbaars, een actieklasse voor alles wat je gaat onderhouden of hergebruiken.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — make | Quiz — Actieklassen →
💪 Of ga direct naar de oefeningen in deze
sectie.