Cursus Raku / Addendum 🆕 / Genera et machinae textuales / Expressiones regulares et grammaticae / Exercises / Grammatica quae addit
Solutio: Grammatica quae addit
Ecce solutio possibilis huius exercitationis.
Codex
grammar Sum {
token TOP { <number>+ % '+' }
token number { \d+ }
}
class SumActions {
method TOP($/) { make [+] $<number>.map(*.Int) }
}
say Sum.parse('3+4+5', actions => SumActions).made;🦋 Inveni codicem fontem in archivo grammar-sum.raku.
Exitus
12Commentarii
<number>+ % '+'unum vel plures numeros signis+separatos congruit — modificator%separatorem inter repetitiones describit.Methodus actionis currit cum
TOPcongruit.makevalorem computatum affigit — summam numerorum — quem.madepost analysin relegit.tokenspatia numquam praeterit, itaque haec grammatica de ingressu suo severa est:'3+4+5'analysatur, sed'3 + 4 + 5'non (.parseNilreddit). Ut spatia circa signa plus accipias, facTOPesserule— et separa quantorem ab atomo suo:grammar Sum { rule TOP { <number> + % '+' } token number { \d+ } }
In
rule, spatium in exemplari vocationem implicitam<.ws>significat. Ut<number> + % '+'scriptum, cum spatio ante quantorem+, illud spatium implicitum totam repetitionem tegit — separatoribus inclusis — itaque et'3+4+5'et'3 + 4 + 5'analysantur, et summa12utroque modo est. (Si mavis apudtokenmanere, scribe spatia expresse in separatore:<number>+ % [ \s* '+' \s* ].)