Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Classi di azione
Scrivere una classe di azione
Una classe di azioni è una classe ordinaria con un metodo per ogni
token della grammatica. Ogni metodo riceve la corrispondenza di quel
token come $/ e chiama make per attaccare un
valore — esattamente ciò che faceva il blocco in linea, ma tenuto
separato dallo schema:
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 }
}La grammatica ora contiene solo lo schema; tutto il significato vive
in SumActions. Nota come i metodi cooperano: a
e b producono ciascuno un intero, e TOP li
legge con $<a>.made e $<b>.made e
ne produce la somma.
Per usare la classe di azioni, passa un’istanza a .parse
con l’argomento nominato actions, poi leggi il risultato in
cima con .made:
say Sum.parse('2+3', actions => SumActions.new).made; # 5Mentre la grammatica analizza, il metodo di ogni token gira
automaticamente e costruisce il valore dal basso verso l’alto. Il
risultato sulla corrispondenza in cima è il valore che vuoi — qui il
numero 5.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Classi di azione | Quiz — make →
💪 Oppure vai direttamente agli esercizi di questa
sezione.