> I'm still unclear as to how you implement lex-like longest token rule with
> P6 regexes.  If the | operator grabs the first one it matches, how do I
> match "bacamus" out of this?:
> 
>         "bacamus" =~ / b.*a | b.*s /

Borrow this trick from Parse::RecDescent:

        rule max (*@candidates) {{ 
                my $best; 
                my $startpos = .pos;
                for @candidates -> $next {
                        .pos = $startpos; 
                        $best = $0 if /<$next>/ && $best && $0.length < $best.length {
                }
                fail unless $best;
                let $0 := $best;
                .pos = $best.pos;
        }}

then:

        "bacamus" =~ / <max(/b.*a/, /b.*s/)> /;


Damian

Reply via email to