Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Gramáticas, clases y herencia
Tokens proto y alternativas
A veces un concepto tiene varias formas: un número puede ser un
entero o un decimal. Podrías escribir una alternativa con
|, pero las gramáticas ofrecen una manera más ordenada: un
proto token con variantes con nombre.
Declara el token paraguas como proto token y después
escribe cada variante como
token nombre:sym<etiqueta>:
grammar Number {
token TOP { <number> }
proto token number {*}
token number:sym<int> { \d+ }
token number:sym<float> { \d+ '.' \d+ }
}
say Number.parse('42').defined; # True
say Number.parse('3.14').defined; # TrueLa línea proto token number {*} dice «un
number es una de las variantes de abajo». Cada variante
lleva una etiqueta :sym<…> que la nombra. Cuando la
gramática necesita un <number>, prueba las variantes
y, por emparejamiento del token más largo, elige la que encaja:
int para 42, float para
3.14.
Los proto tokens se leen mejor que una larga cadena de alternativas
con |, y las etiquetas :sym<…> dan a
cada caso un nombre sobre el que podrás actuar más adelante, cuando
adjuntes significado al análisis. Son la manera idiomática de expresar
«una de estas clases» en una gramática.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Heredar gramáticas | Quiz — Herencia de gramáticas →
💪 O ve directamente a los ejercicios de
esta sección.