Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Tokens en regels
Significante spaties in regels
Een rule is een token met één extra
mogelijkheid aangezet: :sigspace (significante spatie),
precies het bijwoord :s. Het maakt van de witruimte die je
in het patroon schrijft een automatische witruimtematcher tussen de
delen. Dat is wat je wilt zodra de tekst die je ontleedt spaties tussen
haar stukken heeft.
Vergelijk de twee. In een token wordt witruimte in het
patroon genegeerd, dus vraagt
<first> <second> om de twee delen zonder iets
ertussen. Omdat \w+ bij de spatie stopt, matcht een invoer
met spatie niet:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalseJe kunt de spatie in een token accepteren — je
moet hem alleen zelf matchen, bijvoorbeeld met \s+:
token TOP { <first> \s+ <second> } # now 'foo bar' parsesEen rule voegt dat witruimtematchen voor je in, dus is
eenvoudig een spatie tussen de delen schrijven al genoeg:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueEen gebruikelijk patroon is rule gebruiken voor de
structuur op hoger niveau — waar de delen door spaties gescheiden zijn —
en token voor de kleine stukjes als namen en getallen, die
geen spaties bevatten. Zo blijft je grammatica zowel correct als goed
leesbaar.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — Backtracking | Quiz — Tokens en regels →
💪 Of ga direct naar de oefeningen in deze
sectie.