Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Grammatiken / Aktionsklassen

Eine Aktionsklasse schreiben

Eine Aktionsklasse ist eine gewöhnliche Klasse mit einer Methode je Grammatiktoken. Jede Methode erhält den Treffer für dieses Token als $/ und ruft make auf, um einen Wert anzuhängen — genau das, was der inline stehende Block getan hat, nur getrennt vom Muster gehalten:

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 }
}

Die Grammatik enthält nun nur noch das Muster; alle Bedeutung lebt in SumActions. Beachten Sie, wie die Methoden zusammenspielen: a und b make-n je eine ganze Zahl, und TOP liest diese mit $<a>.made und $<b>.made und macht ihre Summe.

Um die Aktionsklasse zu verwenden, übergeben Sie .parse mit dem benannten Argument actions eine Instanz und lesen danach das oberste Ergebnis mit .made:

say Sum.parse('2+3', actions => SumActions.new).made; # 5

Während die Grammatik zerlegt, läuft die Methode jedes Tokens selbsttätig und baut den Wert von unten nach oben auf. Das Ergebnis am obersten Treffer ist der Wert, den Sie wollen — hier die Zahl 5.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Aktionsklassen   |   Quiz — make


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.