Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Grammatiken / Der Parsebaum, make und made
Der Match-Baum
Ein Grammatiktreffer ist ein Baum. Der oberste Treffer hat einen
benannten Eintrag für jedes Token, das TOP verwendet hat,
und diese Einträge sind selbst Match-Objekte mit eigenen Captures. Sie
bewegen sich mit derselben <name>-Schreibweise durch
den Baum, die Sie für benannte Captures verwenden:
grammar Pair {
token TOP { <key> '=' <value> }
token key { \w+ }
token value { \d+ }
}
my $m = Pair.parse('x=5');
say $m<key>; # 「x」
say $m<value>; # 「5」Jeder Zweig ist ein vollständiges Match-Objekt, Sie können ihn also
nach seinem .Str, seiner Position oder einer Umwandlung
fragen. Hier besteht der Wert aus Ziffern, ihn in eine echte Zahl zu
verwandeln ist also nur ein Methodenaufruf:
say $m<value>.Int; # 5Bei tieferen Grammatiken hat der Baum mehr Ebenen —
$m<a><b> erreicht ein Token b, das
innerhalb eines Tokens a verwendet wurde. So durch den Baum
zu gehen funktioniert, wird aber jenseits weniger Felder unhandlich. Das
nächste Thema zeigt einen saubereren Weg, an jeden Treffer den Wert zu
hängen, den Sie tatsächlich wollen.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Der Parsebaum, make und made | Quiz — Der Match-Baum →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.