Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Tokens y reglas
Espacios significativos en las reglas
Una rule es un token con una funcionalidad
más activada: :sigspace (espacio significativo),
exactamente el adverbio :s. Convierte el espacio en blanco
que escribes en el patrón en un emparejador automático de espacio en
blanco entre las partes. Eso es lo que quieres siempre que el texto que
analizas tenga espacios entre sus piezas.
Compara ambos. En un token, el espacio en blanco del
patrón se ignora, así que
<first> <second> pide las dos partes sin nada
en medio. Como \w+ se detiene en el espacio, una entrada
con espacios no encuentra coincidencia:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalsePuedes aceptar el espacio en un token: solo
tienes que emparejarlo tú mismo, por ejemplo con \s+:
token TOP { <first> \s+ <second> } # now 'foo bar' parsesUna rule inserta ese emparejamiento de espacio en blanco
por ti, así que basta con escribir un espacio entre las partes:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueUn patrón habitual es usar rule para la estructura de
nivel superior — donde las partes están separadas por espacios — y
token para las piezas pequeñas como nombres y números, que
no contienen espacios. Eso mantiene tu gramática a la vez correcta y
fácil de leer.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Retroceso | Quiz — Tokens y reglas →
💪 O ve directamente a los ejercicios de esta
sección.