Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Grammatiche, classi ed ereditarietà
Le grammatiche sono classi
Quando scrivi grammar, Raku crea qualcosa di molto
vicino a una classe. I token sono metodi su di essa, e vale tutto il
meccanismo dell’ereditarietà della
parte sugli oggetti. Quindi una grammatica può estenderne un’altra con
is, proprio come una sottoclasse:
grammar Base {
token TOP { <greeting> }
token greeting { 'hi' }
}
grammar Loud is Base {
token greeting { 'HI' }
}
say Loud.parse('HI').defined; # True
say Base.parse('hi').defined; # TrueLoud eredita TOP da Base ma
fornisce il proprio greeting. Quando Loud
analizza, il suo TOP chiama <greeting>,
e viene usato il token sovrascritto in Loud — esattamente
come funziona un metodo sovrascritto sugli oggetti.
Questo rende componibili le grammatiche. Puoi scrivere una grammatica generale per un formato e poi derivarne una versione specializzata che cambia solo i token diversi, senza copiare il resto.
Persino il .parse che continui a chiamare viene da
questa natura di classe: ogni grammatica eredita automaticamente da un
tipo base incorporato chiamato Grammar, che fornisce
.parse (e il suo cugino a corrispondenza parziale,
.subparse). Non lo scrivi mai tu: ti arriva gratis, proprio
come una classe ordinaria eredita i metodi dalla propria genitrice.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Grammatiche, classi ed ereditarietà | Quiz — Ereditare una grammatica →
💪 Oppure vai direttamente agli esercizi di questa
sezione.