Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Classi di azione
Azioni in linea e classi di azione
Ora hai due modi di attaccare un significato a un’analisi. Quale usare?
Le azioni in linea mettono un blocco
{ make … } proprio dentro il token:
grammar Sum {
token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
token a { \d+ }
token b { \d+ }
}Sono rapide da scrivere e vanno bene per una grammatica minuscola o uno script usa e getta. Il prezzo è che lo schema e la logica restano aggrovigliati.
Una classe di azioni tiene separate le due cose — la grammatica descrive la forma, la classe di azioni descrive il significato:
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 }
}Questa separazione ha vantaggi concreti quando una grammatica cresce: lo schema resta leggibile, e puoi accoppiare una grammatica con più classi di azioni — una che valuta, una che formatta, una che costruisce una struttura dati — senza toccare affatto la grammatica.
La regola pratica: azioni in linea per qualcosa di piccolo e usa e getta, una classe di azioni per qualunque cosa dovrai mantenere o riusare.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — make | Quiz — Classi di azione →
💪 Oppure vai direttamente agli esercizi di questa
sezione.