Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Token e regole
Spazi significativi nelle regole
Una rule è un token con una funzionalità in
più accesa: :sigspace (spazio significativo), esattamente
l’avverbio :s. Trasforma lo spazio bianco che scrivi nello
schema in un riconoscitore automatico di spazio bianco fra le parti. È
quello che vuoi ogni volta che il testo da analizzare ha spazi fra i
suoi pezzi.
Confronta i due. In un token lo spazio bianco nello
schema viene ignorato, quindi
<first> <second> chiede le due parti senza
nulla in mezzo. Poiché \w+ si ferma allo spazio, un input
spaziato non trova corrispondenza:
grammar WithToken {
token TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithToken.parse('foo bar').defined; # FalsePuoi accettare lo spazio in un token: devi solo
riconoscerlo tu, per esempio con \s+:
token TOP { <first> \s+ <second> } # now 'foo bar' parsesUna rule inserisce quel riconoscimento dello spazio
bianco al posto tuo, quindi basta scrivere uno spazio fra le parti:
grammar WithRule {
rule TOP { <first> <second> }
token first { \w+ }
token second { \w+ }
}
say WithRule.parse('foo bar').defined; # TrueUno schema comune è usare rule per la struttura di
livello più alto — dove le parti sono separate da spazi — e
token per i pezzi piccoli come nomi e numeri, che non
contengono spazi. Così la tua grammatica resta insieme corretta e facile
da leggere.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Backtracking | Quiz — Token e regole →
💪 Oppure vai direttamente agli esercizi di questa
sezione.