On Wed, Feb 15, 2006 at 10:09:05AM +0100, H. Stelling wrote: > - Capture numbering: > > /(a) [ (b) (c) (d) | (e) & (f) ] (g)/ capture.t suggests something like > $0 $1 $2 $3 $1 $2 $4, but I'm only guessing about the > "&" bit.
Yes. > In the following, > > / (a) [ (b) (c) | $5 := (d) $0 := (e) ] (f) / > > does the first alias have any effect on where the f's will go > (probably not)? I'll defer to @Larry on this one, but my initial impression is that the (f) capture would go into $6. > - Which rules do apply to repeated captures with the same alias? For > example, > the second array aliasing example > > m:w/ Mr?s? @<names> := <ident> W\. @<names> := <ident> > | Mr?s? @<names> := <ident> > /; > > seems to suggests that by using $<names>, the lower branch would have > resulted in a single Match object instead of an array (like the array we > would have gotten if we hadn't used the aliases in the first place). Is > this right? Yes, that's correct. > And could the same effect have been achieved by something > like > > / $<names> := <indent>**{1} / ? Yes, a quantified capturing subrule or subpattern results in an array of Match objects (even if the quantification is "1"). > - More array aliasing: > > is / mv @<files> := [...]* / > just (slightly) shorter for / mv [$<files> := [...]]* / ? I think so. > Likewise, could / @<pairs> := ( (\w+) \: (\N+) )+ / > have also been written / [ $<pairs> := (\w+) \: $<pairs> := (\N+) ]+ / ? Seems like it would work. > - Array and hash aliasing of quantified subpatterns or subrules: what > happens > to the named captures? > > / @<foo> := ( ... $bar := (...) ... )* / Presuming you meant $<bar> there instead of $bar, I have no idea what would happen. (With $bar it's an external alias and would capture an array of matches into the scope in which the rule was declared.) > And if the subpattern or subrule ends with an alternation, can the > number of > array elements to be appended (or hashed) vary depending on whitch > branch is > taken? Again I have to refer this to @Larry, but my initial impression is "yes, it would vary". > - Which of the following constructs could possibly be ok (I hope, none)? > > / $<foo> := ... & $<foo> := ... / I think this one is okay. $<foo> is an array of Match objects, and each Match is likely repeated within the array. > / $<foo> := ... %<foo> := ... / I hope this is not okay. It's certainly not going to be okay anytime soon in the PGE implementation of Perl 6 rules. :-) > / $<foo> := ... | %<foo> := ... / Since the two aliases are in separate alternation branches, I think this is okay. The argument would be similar to / $<foo> := ... | @<foo> := .../ in which $<foo> is either a single Match object or an array of Match objects depending on the branch matched. > / $<foo> := $<foo> := ... / While my instinctual reaction is to say that this ought to be okay, upon thinking about it a bit more I think I'd prefer to say that it's not. At least initially, if nothing else. In particular, I wonder about something like / @<foo> := $<bar> := [...]+ / If we say that an alias always requires a subpattern or subrule (and not another alias), then we avoid a lot of ambiguity, and the above could be written as / @<foo> := [ $<bar> := [...]+ ] / / @<foo> := [ $<bar> := [...] ]+ / depending on what is desired. > - Do aliases bind right-to-left, as do assignments? > / $2 := $5 := ... / # next should be $3, not $6 Assuming we allow chained aliases such as this (see above note), I'd still argue for $6 instead of $3. > - Which kind of escape sequences are allowed (or required) in enumerated > character classes? AFAIK, this hasn't been completely decided or specified yet. Pm