Kurso de Raku / Regulesprimoj kaj gramatikoj / Gramatikoj / Gramatikoj, klasoj kaj heredo
Proto-ĵetonoj kaj alternativoj
Foje unu koncepto havas plurajn formojn — nombro povus esti entjero
aŭ dekumo. Vi povus skribi alternativon per |, sed
gramatikoj ofertas pli bonordan manieron: proto-ĵetonon kun
nomitaj variantoj.
Deklaru la ombrelan ĵetonon kiel proto token, poste
skribu ĉiun varianton kiel 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; # TrueLa linio proto token number {*} diras
«number estas unu el la subaj variantoj». Ĉiu varianto
portas etikedon :sym<…>, kiu nomas ĝin. Kiam la
gramatiko bezonas <number>, ĝi provas la variantojn
kaj, per kongruigo laŭ plej longa ĵetono, elektas tiun, kiu konvenas —
int por 42, float por
3.14.
Proto-ĵetonoj legiĝas pli bone ol longa ĉeno de alternativoj
|, kaj la etikedoj :sym<…> donas al ĉiu
kazo nomon, laŭ kiu vi povas agi poste, kiam vi alfiksas signifon al la
analizo. Ili estas la idioma maniero esprimi «unu el ĉi tiuj specoj» en
gramatiko.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Kvizo — Heredi gramatikojn | Kvizo — Gramatikoj kaj heredo →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.