Larry Wall writes:
> On Mon, Feb 02, 2004 at 02:09:33AM -0700, Luke Palmer wrote:
> :     method if_statement::code($rc) { # $rc is the regcounter
> :           self.item[0].code($rc.next('condition'))
> :         ~ "unless $rc{condition}, $rc{Lfalse}\n"
> :         ~ self.item[1].code($rc.next)
> :         ~ "$rc{Lfalse}:\n"
> :     }
> 
> What do you want Perl 6 to do for you here?

Beats me.  I was just throwing it out there.  Maybe it would spark an
idea somewhere.

> : We've already gone over this, but it'd be good to have the ability for
> : parsers to (somehow) "feed" into one another, so that you can do
> : comments without putting a <comment> in between every grammar rule (or
> : mangling things to do that somehow), or search and replace, which has
> : the disadvantage of being unable to disable comments during parts of the
> : parse.  $Parse::RecDescent::skip works well, but I don't think it's
> : general enough.
> 
> Agreed.  I do think you want the comments in the grammar, if for no
> other reason than it provides a hook to do something with the comment
> if you retarget the grammar from normal compilation to, say, code
> translation.  I don't think it's out of the realm of possibility for
> Perl 6 to support strings with embedded objects as funny characters.
> In the limit, a string could be composed of nothing but a stream of
> objects.  (As a hack, one can embed illegal Unicode characters (above
> U+10FFFF) that map an integer to an array of objects, but maybe we can
> do better from a GC perspective.)

For implementation we'd surely be better off using some kind of list of
linked objects and strings.  The pattern engine that I'm about to
propose to p6i wouldn't have a problem with that, efficiency wise.

But, after all, this is perl6-I<language>, so no more internals talk :-).

And exactly (or fuzzily) how might this be done, syntax wise? 

    "foo $bar baz"

Stringifies $bar and concatenates it into the string.  C<~> does the
same thing.  Perhaps Object.aschar or something.

But then there's how you extract such things.  C<substr $s, $n, 1> might
return an object, but C<substr $s, $n, 2> would always return a string.
That's almost, but not quite, completely unexpected.

Maybe it'd be better to generalize into the realm of tokens.  A token
could consist of a string, which is matched against with the normal
regex stuff.  Or it could consist of an object, which would match the
<SomeClass> rule and fail on most else (extensibly, though).

Objects underlying a string containing their stringified representations
still sounds pretty good, though.  Especially if we use eg. U+110000 as
the "object character", so objects that don't want to be matched like
ordinary text can treat themselves as embedded objects.

Luke

Reply via email to