grammar G {
rule TOP { <a=.num> <sig> <b=.num> }
token num { \d+ }
proto token sig {*}
token sig:sym<+> {<sym>}
token sig:sym<-> {<sym>}
token sig:sym<*> {<sym>}
token sig:sym</> {<sym>}
}
class A {
method num($/) { make +$/ }
method sig:sym<+>($/) { make &[+] }
method sig:sym<->($/) { make &[-] }
method sig:sym<*>($/) { make &[*] }
method sig:sym</>($/) { make &[/] }
method TOP($/) { make $<sig>.made.($<a>.made, $<b>.made) }
}
say G.parse("13 + 29", :actions(A)).made