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

12

Commentarii

  1. <number>+ % '+' unum vel plures numeros signis + separatos congruit — modificator % separatorem inter repetitiones describit.

  2. Methodus actionis currit cum TOP congruit. make valorem computatum affigit — summam numerorum — quem .made post analysin relegit.

  3. token spatia numquam praeterit, itaque haec grammatica de ingressu suo severa est: '3+4+5' analysatur, sed '3 + 4 + 5' non (.parse Nil reddit). Ut spatia circa signa plus accipias, fac TOP esse rule — 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 summa 12 utroque modo est. (Si mavis apud token manere, scribe spatia expresse in separatore: <number>+ % [ \s* '+' \s* ].)

Grammatica quae addit   |   Omnia coniungere