Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Grammatiken / Token und Regeln
Signifikante Leerzeichen in Regeln
Eine rule ist ein token mit einer
zusätzlich eingeschalteten Möglichkeit: :sigspace
(bedeutsamer Leerraum), genau dem Adverb :s. Es verwandelt
den Leerraum, den Sie im Muster schreiben, in einen selbsttätigen
Leerraum-Treffer zwischen den Teilen. Genau das wollen Sie, wann immer
der zu zerlegende Text Leerzeichen zwischen seinen Stücken hat.
Vergleichen Sie beides. In einem token wird Leerraum im
Muster übergangen,
<first> <second> verlangt also die beiden Teile
ohne irgendetwas dazwischen. Da \w+ am Leerzeichen anhält,
trifft eine Eingabe mit Leerzeichen nicht:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalseSie können das Leerzeichen in einem token
annehmen — Sie müssen es nur selbst treffen, etwa mit
\s+:
token TOP { <first> \s+ <second> } # now 'foo bar' parsesEine rule fügt dieses Leerraum-Treffen für Sie ein, ein
schlichtes Leerzeichen zwischen den Teilen genügt also:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueEin verbreitetes Vorgehen ist, rule für den
übergeordneten Aufbau zu nehmen — wo die Teile durch Leerzeichen
getrennt sind — und token für die kleinen Stücke wie Namen
und Zahlen, die keine Leerzeichen enthalten. Das hält Ihre Grammatik
zugleich richtig und gut lesbar.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Quiz — Backtracking | Quiz — Token und Regeln →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.