Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / El árbol de análisis, make y made
El árbol de coincidencias
Una coincidencia de gramática es un árbol. La coincidencia de arriba
tiene una entrada con nombre por cada token que usó TOP, y
esas entradas son a su vez objetos de coincidencia con sus propias
capturas. Recorres el árbol con la misma sintaxis
<nombre> que usas para las capturas con nombre:
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」Cada rama es un objeto de coincidencia completo, así que puedes
pedirle su .Str, su posición o convertirlo. Aquí el valor
son dígitos, de modo que convertirlo en un número de verdad es solo una
llamada a un método:
say $m<value>.Int; # 5En gramáticas más profundas el árbol tiene más niveles:
$m<a><b> llega a un token b usado
dentro de un token a. Recorrer el árbol así funciona, pero
para algo más que un par de campos se vuelve incómodo. El tema siguiente
muestra una forma más limpia de adjuntar a cada coincidencia el valor
que de verdad quieres.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← El árbol de análisis, make y made | Quiz — El árbol de coincidencias →
💪 O ve directamente a los ejercicios de esta
sección.