Kurso de Raku / Regulesprimoj kaj gramatikoj / Gramatikoj / Ĵetonoj kaj reguloj
Signifaj spacoj en reguloj
rule estas token kun unu kroma eco ŝaltita:
:sigspace (signifa spaco), ekzakte la adverbo
:s. Ĝi transformas la blankspacon, kiun vi skribas en la
ŝablono, en aŭtomatan blankspacan kongruilon inter la partoj. Jen kion
vi volas, kiam ajn la teksto, kiun vi analizas, havas spacojn inter siaj
pecoj.
Komparu la du. En token, blankspaco en la ŝablono estas
ignorata, do <first> <second>
petas la du partojn kun nenio inter ili. Ĉar \w+ haltas ĉe
la spaco, spacita enigo havas neniun kongruon:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalseVi povas akcepti la spacon en token — vi nur
devas kongruigi ĝin mem, ekzemple per \s+:
token TOP { <first> \s+ <second> } # nun 'foo bar' analiziĝasrule enmetas tiun blankspacan kongruigon por vi, do
simple skribi spacon inter la partoj sufiĉas:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueOfta ŝablono estas uzi rule por la pli alta strukturo —
kie la partoj estas apartigitaj per spacoj — kaj token por
la malgrandaj pecoj kiel nomoj kaj nombroj, kiuj enhavas neniujn
spacojn. Tio tenas vian gramatikon kaj ĝusta kaj facile legebla.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Kvizo — Retropaŝado | Kvizo — Ĵetonoj kaj reguloj →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.