Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Grammatiche, classi ed ereditarietà

Token proto e alternative

A volte un concetto ha più forme — un numero potrebbe essere un intero o un decimale. Potresti scrivere un’alternativa con |, ma le grammatiche offrono un modo più ordinato: un proto token con varianti con nome.

Dichiara il token ombrello come proto token, poi scrivi ogni variante come token nome:sym<etichetta>:

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; # True

La riga proto token number {*} dice «un number è una delle varianti qui sotto». Ogni variante porta un’etichetta :sym<…> che la nomina. Quando la grammatica ha bisogno di un <number>, prova le varianti e, con il riconoscimento del token più lungo, sceglie quella che calza — int per 42, float per 3.14.

I proto token si leggono meglio di una lunga catena di alternative con |, e le etichette :sym<…> danno a ogni caso un nome su cui potrai agire più tardi, quando attacchi un significato all’analisi. Sono il modo idiomatico di esprimere «uno di questi generi» in una grammatica.

Pratica

Risolvi 1 quiz sul contenuto di questo argomento.

Quiz — Ereditare una grammatica   |   Quiz — Ereditarietà fra grammatiche


💪 Oppure vai direttamente agli esercizi di questa sezione.