Kurt Hutchinson writes: > For specifying in-rule repetitions, why not use the rule modifer we > already have for specifying whole-rule repetitions; namely, C<:x>. Allow > :x inside rules like :i and :w, and we get something like this: > rx :w/ three m's\: [:3x m] / > rx :w/ three to five m's\: [:x(3..5) m] / > rx :w/ done at runtime\: [:x($m..$n) m] /
That's an interesting idea. But I'd have to agree with your next paragraph on the issue. > It seems straightforward to me, but I admit I don't know how difficult > that would be for parsing/compiling purposes. However, it seems too > different from :i and :w on some level, to be treated the same. > > So instead of a match modifier, how about adding a special named > assertion akin to C<before> and C<after> called C<x>, that takes an > argument: > rx :w/ three m's\: <x(3) m> / > rx :w/ three to five m's: <x(3..5) m> / > rx :w/ done at runtime\: <x($m..$n) m> / > > Repitition is a kind of assertion, after all, and it seems like it > should get to play in the same angle-bracket sandbox as the other > assertions. Yes, we considered this. First of all, the "m" there is illegal if you've got parens. Once you get the closing paren, you need to get a > or it's a parse error. But there's this: <x(3..5, 'm')> The trouble is that it doesn't look in the slightest like a quantifier anymore. **{} does, even if it is a big fat ugly one. > I confess that I've purposely left out a small detail, and I'm sure > you've all noticed: non-greedy matching. I couldn't come up with a way > that looked all that nice. That's okay, none of it looked nice. :-p > I don't know if putting the C<?> after the argument would even work: > rx :w/ non-greedy m's\: <x(3..5)? m> / > And putting it before the argument (as part of the assertion name?) just > looks weird: > rx :w/ non-greedy m's\: <x?(3..5) m> / Both of those are illegal syntactically, so no dice. > So maybe this proposal is a complete no-go because of non-greediness, > but I thought I'd throw it out there anyway because it seemed to me to > fit in with assertions rather well, and I like the generalized assertion > idea. I am definitely fond of the generalized assertion idea. I just don't think it belongs here. (It certainly doesn't half-belong like it did in A5: / [foo]<3,5> /. That's not an assertion!) Thanks for your suggestions, though. Luke