On Sat, Nov 29, 2008 at 05:57:07PM +1000, Илья wrote:
> Hi there,
> I have tried to fix our HTML::Template in November which is blocked by
> Rakudo segaful.
> I was trying to create simple example, but can`t reproduce it.  By the
> way now I have short
> example(much shorter then when I start), and I have questions about it:
> 
> grammar G {
>     token TOP { ^ <foo>+ $ };
>     token foo { ':' <bar>?  };
>     token bar { \w };
> };
> 
> ":a:b" ~~ G::TOP;
> 
> say ~$/<foo><bar>; #:a
> 
> # why ':a'? why not just 'a'?

$/<foo> is an array of Match objects, and Parrot currently
doesn't distinguish between array indexes and hash indexes --
it treats them both the same.

Thus $/<foo><bar>   is ending up acting the same as  $/<foo>['bar'],
and since 'bar' stringifies to zero that's the same as $/<foo>[0],
which includes the colon.

The correct way to get just the <bar> component would be

    $/<foo>[0]<bar>[0]

since both <foo> and <bar> are quantified subrules in the grammar.

Pm

Reply via email to