Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Gramatikas, klases un mantošana
Proto marķieri un alternatīvas
Dažreiz vienam jēdzienam ir vairākas formas — skaitlis var būt vesels
vai decimāls. Varētu uzrakstīt alternatīvu ar |, taču
gramatikas piedāvā kārtīgāku veidu: proto marķieri ar
nosauktiem variantiem.
Deklarējiet jumta marķieri kā proto token un pēc tam
uzrakstiet katru variantu kā
token nosaukums:sym<etiķete>:
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; # TrueRinda proto token number {*} saka: «number
ir viens no zemāk esošajiem variantiem». Katrs variants nes
:sym<…> etiķeti, kas to nosauc. Kad gramatikai vajag
<number>, tā izmēģina variantus un pēc garākā
marķiera principa izvēlas to, kurš der, — int priekš
42, float priekš 3.14.
Proto marķieri lasās labāk nekā gara | alternatīvu
virkne, un :sym<…> etiķetes dod katram gadījumam
nosaukumu, ar ko vēlāk var rīkoties, kad parsējumam piesaistāt nozīmi.
Tie ir raksturīgais veids, kā gramatikā izteikt «viens no šiem
veidiem».
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Viktorīna — Gramatiku mantošana | Viktorīna — Gramatikas un mantošana →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.