> On Mon, Mar 17, 2003 at 11:17:21AM -0700, Luke Palmer wrote:
> >> > <name(expr)> # call rule, passing Perl args
> >> > { .name(expr) } # same thing.
> >>
> >> Considering perl can't sanely know how to backtrack into a closure,
> >> wouldn't { .name(expr) } be equal to <name(expr)>: instead?
> >
> >Nope. <name(expr)>: is equivalent to { .name{expr} }: . It does know
> >how to backtrack into a closure: it skips right by it (or throws an
> >exception through it... not sure which) and tries again.
> >Hypotheticals make this function properly.
>
> That sounds very unlikely, and is also contradicted by earlier messages,
> like: "closures don't normally get control back when backtracked over"
> -- Larry Wall in http://nntp.x.perl.org/group/perl.perl6.language/10781
>
> Hypothetical variables make things work right when backtracking *over* a
> closure, but certainly not *into* one.
>
> I'm talking about cases like:
>
> rule foo { a+ }
> rule bar { { .foo } ab }
>
> my intuition says this equals { [a+]: ab } and hence never matches
Oh, right, sorry. That was a braino on my part. That is what I
meant, but I didn't realize that { .name{expr} }: was redundant.
> > rule somerule($0) {}
>
> I meant ofcourse as a method (since rules are just methods if I understood
> correctly); to do the matching yourself rather than with perl 6 regex.
Ohh. That has to do with the parse object, which hasn't been covered
yet. The *signature* is probably just:
grammar FooBar {
method somerule() {...}
}
Where the invocant would be a FooBar, which presumably inherits from
something like ParseObject.
> >> Considering <prop> means "matches a character with property prop", it
> >> seems to me <!prop> would mean the ZERO-WIDTH assertion "does not match a
> >> character with property prop", rather than "match a character without
> >> property prop".
> >
> >Right. It has to be. There is no way to implement it in a
> >sufficiently general way otherwise.
>
> Hence the example of saying \P{prop} becomes <!prop> is wrong; it actually
> becomes <-prop>, right?
Probably. Larry might have something different in mind, but what
you've said seems the obvious solution at the moment.
> >> While I'm on the subject.. why not allow <> as the match-always assertion?
> >> It might conflict with huffman encoding, but I certainly don't think <>
> >> could ethically mean anything other than this. And <!> would ofcourse be
> >> the match-never assertion.
> >
> >You could always use <(1)> and <(0)>, which are more SWIMmy :)
>
> Ick, ugly; I'd rather use <null> and <!null> than those, but <> and <!>
> are shorter, and have (to me) fairly obvious meanings. But it was just a
> random suggestion; I'm not going to actively try to advocate them if
> they're not liked :-)
<null> and <!null>, good idea. I didn't even think of that. I think
<> and <!> are violating the whole point of introducing <null>: that
it was unclear what was meant by //, and it's too easy to do. They're
not quite as bad, but it doesn't seem right. <null> and <!null> are
good.
(Forgive me for being a little braindead; it's been a while since
I've read A5)
Luke