Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Actieklassen
Een actieklasse schrijven
Een actieklasse is een gewone klasse met één methode per
grammaticatoken. Elke methode ontvangt de match voor dat token als
$/ en roept make aan om er een waarde aan te
hangen — precies wat het inline blok deed, maar apart van het patroon
gehouden:
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 }
}De grammatica bevat nu alleen het patroon; alle betekenis leeft in
SumActions. Merk op hoe de methoden samenwerken:
a en b make-en elk een geheel
getal, en TOP leest die met $<a>.made en
$<b>.made en maakt hun som.
Om de actieklasse te gebruiken, geef je met het benoemde argument
actions een instantie aan .parse mee en lees
je daarna het bovenste resultaat met .made:
say Sum.parse('2+3', actions => SumActions.new).made; # 5Terwijl de grammatica ontleedt, draait de methode van elk token
automatisch en wordt de waarde van onderaf opgebouwd. Het resultaat op
de bovenste match is de waarde die je wilt — hier het getal
5.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Actieklassen | Quiz — make →
💪 Of ga direct naar de oefeningen in deze
sectie.