Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Marķieri un likumi
Nozīmīgas atstarpes likumos
rule ir token ar vienu papildu iespēju
ieslēgtu: :sigspace (nozīmīga atstarpe) — tieši
apstākļvārdu :s. Tas pārvērš atstarpes, ko rakstāt
raksturā, par automātisku atstarpju piemeklētāju starp daļām. Tas ir
tas, ko vēlaties ikreiz, kad parsējamajā tekstā starp gabaliem ir
atstarpes.
Salīdziniet abus. token iekšienē atstarpes raksturā tiek
ignorētas, tāpēc
<first> <second> prasa abas daļas bez nekā
starp tām. Tā kā \w+ apstājas pie atstarpes, ievadei ar
atstarpi sakritības nav:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalseAtstarpi token iekšienē var pieņemt — tikai
jāpiemeklē pašam, piemēram, ar \s+:
token TOP { <first> \s+ <second> } # now 'foo bar' parsesrule šo atstarpju piemeklēšanu ieliek jūsu vietā, tāpēc
pietiek vienkārši uzrakstīt atstarpi starp daļām:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueIzplatīts paņēmiens ir izmantot rule augstāka līmeņa
struktūrai, kur daļas atdalītas ar atstarpēm, un token
maziem gabaliem, piemēram, nosaukumiem un skaitļiem, kuros atstarpju
nav. Tas patur jūsu gramatiku gan pareizu, gan viegli lasāmu.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Viktorīna — Atkāpšanās | Viktorīna — Marķieri un likumi →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.