On Wed, Dec 08, 2004 at 11:50:51AM -0700, Luke Palmer wrote:
: > Now suppose that we extend that "I am a boolean" feeling to
: > 
: >     <?{ code }>
: > 
: > which might take the place of the confusing <(...)>, and make consistent
: > the notion that we always use {...} to invoke "real" code.
: 
: Hmm...  I'm just so attached to <(...)>.  I find it quite beautiful.  It
: also somehow communicates the feeling "you shouldn't be putting
: side-effects here".

Well, there is that.  On the other hand, <{...}> is usually just as
side-effect free.  I'm still of two minds about <?{...}> vs <(...)>.
Course, if we used «...» to interpolate something then «{...}»
might interpolate a rule, which would free up <{...}> for the code
assertion.  Doesn't have your side-effectlessness feeling, but it is
at least symmetrical.

: > I think I'm leaning toward the idea that anything in angles that
: > begins alpha is a capture to just the alpha part, so the ? prefix is
: > merely a no-op that happens to make the assertion not start with an
: > alpha.  Interestingly, that gives these implicit bindings:
: > 
: >     <after ...>             $<after>        $`
: >     <before ...>    $<before>       $'
: 
: I don't quite follow.  Wouldn't that mean that these guys would get
: clobbered if you used lookaheads or lookbehinds in your rules?

The point is that you don't get the $`/$' equivalents unless you
explicitly put a lookbehind/lookahead assertion in your pattern:

    /<after .*> foo <before .*>/

That has the benefit of telling the rule engine when it has to worry
about saving the prefix/postfix.  Not knowing that is part of why
we had the sawampersand problem in Perl 5.

My other point is that the Perl 6 names of $` and $' fall out naturally
if we name the assertions appropriately.  Unfortunately, $<after> and
$<before> don't work as well for variable names as they do for assertion
names.  Maybe we just have <pre> and <post> forms that really mean <after .*>
and <before .*>.

: > Or we could use some standard delim for that:
: > 
: >     <ws-1> <ws-2> <ws-3>
: > 
: > which is vaguely reminiscent of our "version" syntax.  Indeed, if we
: > had quantifications, you might well want to have wildcards <ws-*> and
: > let the name be filled in rather than autogenerating a list.  But
: > maybe we just stick with lists in that case.
: 
: I can imagine this being a lot cleaner if the thing after the dash can
: be any sort of identifier:
: 
:     <ws-indent> if <?ws> <condition> <ws-comment>

Funny thing, I just wrote that into S05.pod.

: On the other hand, it could be misleading, since the standard naming of
: BNF uses dashes instead of underscored.  I don't think it should be a
: big problem though. 

Me either, since it's difficult to define a rule with a hyphen in the name.
And other delimiter candidates run into various problems too.

Larry

Reply via email to