http://www.perlmonks.org?node_id=179569


in reply to Parsing with Perl 6

Wow, very impressive. ++!

// <-[\n]>*:

I'd really want to take advantage of the new \N:

// \N*

foreach my $function (@functions)

In Perl6, foreach will just be for. The C-style for loop will be called loop. And the for syntax will slightly change:

for @functions -> my $function { ... }

rule quoted_string ($type) { $type [ <-[$type]>*: | [ <after \\ > $type ] ]* $type }

Why not already have both types there?

rule quoted_string { $delimiter := ( <['"]> ) [ <!before $delimiter> . | <after \\> $delimiter ]* $delimiter }
Hmm - In current regex stuff, I'd probably have written: /(['"]) (?: (?! \\ | \1) . | \\ . )* \1/x. Why not use something like that? (Or is it just a matter of taste?)
rule quoted_string { $delimiter := ( <['"]> ) [ <!before \\ | $delimiter> . | \\ . ] $delimiter }

- Yes, I reinvent wheels.
- Spam: Visit eurotraQ.

Replies are listed 'Best First'.
Re: Re: Parsing with Perl 6
by jryan (Vicar) on Jul 05, 2002 at 23:04 UTC

    Ah, you are completely right about \N, of course. I'm just a blockhead ;(

    Concerning quotes: I think that the way I structured mine is easier to convert from logic. For instance, I defined a quoted string as:

    - start quote - string of (non-quote or backslashed quote) characters - end quote

    Which I then translated into (comments added this time):

    rule quoted_string { " # start quote [ # string <-["]>+: # non quote characters | # or [ <after \\ > " ] # backslashed quote character ]* # end string " # end quote }

    It was then shown how to make it "dynamic" by simply adding an argument and subsituting that argument in for the quote delimeter. While yours is much more elegant and efficient, I thought that my example was easier to follow in the current context.