On Mon, Oct 27, 2008 at 04:07:39PM -0500, [EMAIL PROTECTED] wrote: > > On Sun, Oct 26, 2008 at 10:45 PM, Chris Dolan <[EMAIL PROTECTED]> wrote: > >> S05 always uses single curlies for closures, but throughout Parrot, code > >> seems to use double curlies in PGE regexps. Why is that? > >> > >> That is, why this: > >> m/ foo {{ say "found foo" }} / > >> and not this: > >> m/ foo { say "found foo" } / > >> > >> The latter complains about "Statement not terminated properly". > >> > > this is old PGE syntax that hasn't yet been updated to match S05. it's a > > bug.
Sometimes working with Parrot is a lesson in archaeology -- by digging deep enough you see artifacts of a different age. In order to properly parse curlies in regexes one has to have a full-fledged (Perl 6 / Python / PHP/ whatever) parser available to be able to find the closing curly. Long ago, before we had any such parsers, people wanted to be able to embed executable code inside of regexes -- indeed, the parsers themselves make use of this capability. So, PGE used the double-curly notation as a stop-gap -- it can easily "scan ahead" to the closing double-curly to find the end of the embedded code and squirrel it away for execution. This was all done before S05 defined the :lang modifier for embedded closures in regexes, and at the moment it only works for embedding PIR. Returning to present day, the next step will be to enable the :lang modifier in regexes so that it can attach to any compiler. However, since Perl 6 regular expression parsing is about to receive a huge makeover anyway, I was waiting until then to work out those details. > Thanks for the info. I'll try to learn enough to write a PGE patch to > support {PIR} notation. Note that {PIR} is not valid by itself, it would need to be :lang('PIR') {PIR} or something like that. See S05 for the latest syntax. The default interpretation of curlies with no :lang modifier will undoubtedly be Perl 6 syntax (although we may make it default to "whatever language the regex is embedded in" if we can do that). Pm