Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Gramáticas, clases y herencia / Exercises / Un número con proto

Solución: Un número con proto

Aquí tienes una posible solución para la tarea.

Código

grammar Number {
    token TOP { <number> }

    proto token number {*}
    token number:sym<dec> { \d+ }
    token number:sym<hex> { '0x' <[0..9a..f]>+ }
}

say Number.parse('0xff').defined;

🦋 Puedes encontrar el código fuente en el archivo proto-number.raku.

Salida

True

Comentarios

  1. El proto token number tiene dos variantes, dec y hex.

  2. Para 0xff, la variante dec empareja solo el 0 inicial, lo que dejaría fuera xff; la variante hex empareja el conjunto. El emparejamiento del token más largo elige por tanto hex y la cadena se analiza. La misma gramática sigue aceptando un decimal simple como 42.

Un número con proto   |   Un booleano con proto