Курс языка программирования Raku / Регулярные выражения и грамматики / Грамматики / Дерево разбора, make и made
Дерево совпадения
Совпадение грамматики — это дерево. У верхнего совпадения есть
именованная запись для каждого токена, который использовал
TOP, а эти записи сами являются объектами совпадения со
своими захватами. По дереву ходят тем же синтаксисом
<имя>, что и для именованных захватов:
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 | Тест — Дерево совпадения →
💪 Или перейдите сразу к упражнениям этого
раздела.