Re: Why {{}} for regexp closures instead of just {}?

2008-10-28 Thread Patrick R. Michaud
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


Re: Why {{}} for regexp closures instead of just {}?

2008-10-27 Thread jerry gay
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.

or maybe, you can say that closures inside regexes aren't supported
yet, but rakudo has a feature that allows {{PIR}}} to work.
~jerry