Курс по Raku / Регулярни изрази и граматики / Граматики / Дървото на разбора, make и made

Дървото на съвпадението

Съвпадението на граматика е дърво. Най-горното съвпадение има именуван запис за всеки токен, използван от TOP, а тези записи сами са обекти на съвпадението със свои собствени прихващания. Из дървото се движите със същия синтаксис <name>, който използвате за именувани прихващания:

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」

Всеки клон е пълноценен обект на съвпадението, така че можете да го попитате за неговия .Str, за позицията му или да го преобразувате. Тук стойността се състои от цифри, така че превръщането ѝ в истинско число е само едно извикване на метод:

say $m<value>.Int; # 5

При по-дълбоки граматики дървото има повече нива — $m<a><b> стига до токен b, използван вътре в токен a. Такова обхождане на дървото работи, но за нещо повече от няколко полета става тромаво. Следващата тема показва по-чист начин да прикачите към всяко съвпадение точно онази стойност, която искате.

Практика

Направете 1 тест върху съдържанието на тази тема.

Навигация в курса

Дървото на разбора, make и made   |   Тест — Дървото на съвпадението


💪 Или преминете направо към упражненията в този раздел.