> just an aside, and a bit off-topic, but has anybody considered
> hijacking the regular expression engine in perl6 and turning it into
> its opposite, namely making *productions* of strings/sounds/whatever
> that could possibly match the regular expression? ie:
>
> a*
>
> producing
>
> ''
> a
> aa
> aaa
> aaaa
>
> etc.
>
> I could think of lots of uses for this:
>
> 1) test data for databases and programs.
> 2) input for genetic algorithms/code generators
> 3) semantic rules/production of random sentences.
>
> In fact, I foresee a combo of 2,3 and some expert system somewhere
> producing the first sentient perl program. ;-)
Yeah, it seems like a neat idea. It is if you generate it
right... but, fact is, you probably won't. For anything that's more
complex than your /a*/ example, it breaks down (well, mostly):
/\w+: \d+/
Would most likely generate:
a: 0
a: 00
a: 000
a: 0000
Or:
a: 0
a: 1
...
a: 9
a: 00
a: 01
ad infinitum, never getting to even aa: .*
But I guess then you'd see a lot more quantifiers and such.
/\w+<8>: \d<4>/
Is finite (albeit there are 63**8 * 10**4 == 2,481,557,802,675,210,000
combinations). References to the heat death of the universe, anyone?
And then there's Unicode. %-/
In reality, I don't think it would be that useful. Theoretically,
though, you *can* look inside the regex parse tree and create a
generator out of it... so, some module, somewhere.
> Now, just got to think of the syntax for it.. how to make it usable.
That's easy:
use Regex::Generator;
my @list is Regex::Generator(/a*/);
for @list {
dostuff($_)
}
That or an iterator.
Luke