Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Grammatiken / Grammatiken, Klassen und Vererbung
Proto-Token und Alternativen
Manchmal hat ein Begriff mehrere Formen — eine Zahl kann eine ganze
Zahl oder eine Dezimalzahl sein. Sie könnten eine Alternation mit
| schreiben, doch Grammatiken bieten einen ordentlicheren
Weg: ein Prototoken mit benannten Spielarten.
Deklarieren Sie das übergeordnete Token als proto token
und schreiben Sie dann jede Spielart als
token name:sym<label>:
grammar Number {
token TOP { <number> }
proto token number {*}
token number:sym<int> { \d+ }
token number:sym<float> { \d+ '.' \d+ }
}
say Number.parse('42').defined; # True
say Number.parse('3.14').defined; # TrueDie Zeile proto token number {*} sagt: „ein
number ist eine der Spielarten unten“. Jede Spielart trägt
ein Etikett :sym<…>, das sie benennt. Braucht die
Grammatik ein <number>, probiert sie die Spielarten
und wählt per longest-token matching diejenige, die passt —
int für 42, float für
3.14.
Prototokens lesen sich besser als eine lange Kette von
|-Alternativen, und die Etiketten
:sym<…> geben jedem Fall einen Namen, auf den Sie
später eingehen können, wenn Sie der Zerlegung Bedeutung geben. Sie sind
die idiomatische Art, „eine dieser Arten“ in einer Grammatik
auszudrücken.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Quiz — Grammatiken vererben | Quiz — Grammatikvererbung →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.