Damian Conway:
# > 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/)> /;

Will that handle captures correctly?  Maybe you should temporize $0...

--Brent Dax <[EMAIL PROTECTED]>
@roles=map {"Parrot $_"} qw(embedding regexen Configure)

Early in the series, Patrick Stewart came up to us and asked how warp
drive worked.  We explained some of the hypothetical principles . . .
"Nonsense," Patrick declared.  "All you have to do is say, 'Engage.'"
    --Star Trek: The Next Generation Technical Manual

Reply via email to