Let's see. If you have my $input = '~i o<<<', then <other> matches.
'rule' turns on :sigspace. If you use 'token' instead of 'rule' then <other> matches. I don't quite have the full picture of what's happening. -y On Sun, Sep 23, 2018 at 7:07 PM, Mark Carter <alt.mcar...@gmail.com> wrote: > My grammar doesn't seem to match the 'other' rule. What's wrong with it? > > grammar Weave { > token TOP { <el> * } > rule el { <lt> | <tilde> | <other> } > rule lt { '<' } > rule tilde { '~' \S+ } > rule other { . } > } > > class Weaver { > has Str $.outstr; > > method TOP ($/) { make $<el> ; put("top called") ; put($<el>) } > method el ($/) { put($/) } > method tilde ($/) { say 'tilde called' } > method lt ($/) { make '<' ; put('<'); $!outstr ~= 'X' } > method other ($/) { $!outstr ~= '.'; say 'other called'; put('.'); > } > > } > > $input = '~i <<<YZ'; > my $w = Weaver.new(); > Weave.parse($input, :actions($w)); > say $w.outstr; # outputs XXX > > It never once says 'other called'. It seems to be matching the '<' signs > OK, and I think the '~' is OK, too. It's just any other token that it's not > matching. >