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; # True

Rinda 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.