Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Grammatica’s, klassen en overerving / Exercises / Een getal met proto

Oplossing: Een getal met proto

Hier is een mogelijke oplossing voor de taak.

Code

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;

🦋 Je kunt de broncode vinden in het bestand proto-number.raku.

Uitvoer

True

Opmerkingen

  1. Het prototoken number heeft twee varianten, dec en hex.

  2. Voor 0xff matcht de variant dec alleen de voorafgaande 0, waarna xff zou overblijven; de variant hex matcht het geheel. Longest-token matching kiest daarom hex, en de string wordt ontleed. Dezelfde grammatica aanvaardt nog steeds een gewoon decimaal getal als 42.

Cursusnavigatie

Een getal met proto   |   Een boolean met proto