develooper Front page | perl.perl6.language | Postings from April 2006

Re: [svn:perl6-synopsis] r8883 - doc/trunk/design/syn

Thread Previous
Daniel Hulme
April 20, 2006 03:29
Re: [svn:perl6-synopsis] r8883 - doc/trunk/design/syn
Message ID:
> +but rather easier to read.  The bare C<*>, C<+> and C<?> quantifiers
> +never backtrack in a C<token> unless some outer rule has specified a
> +C<:panic> option that applies.  If you want to prevent even that, use
> +C<*:>, C<+:> or C<?:> to prevent any backtracking into the quantifier.
> +If you want to explicitly backtrack, append either a C<?> or a C<+>
> +to the quantifier.   The C<?> forces minimal matching as usual,
> +while the C<+> forces greedy matching.  The C<token> declarator is
> +really just short for
> +
> +    rule :ratchet { ... }
> +
> +The other is the C<parse> declarator, for declaring non-terminal
> +productions in a grammar.  It also does not backtrack unless a
> +C<:panic> is in effect or you explicitly specify a backtracking
> +quantifier.  In addition, a C<parse> rule also assumes C<:words>.

I really don't like the second-to-last sentence above ("It also does not...").
It took me a few reads-through to parse it, and it sounds like it means, "Like
c<token>, it does not backtrack unless a C<:panic> is in effect. In addition, it
does not backtrack if you explicitly specify a backtracking quantifier."

Perhaps you could reword the end of that paragraph as:

Like C<token>, it only backtracks when a C<:panic> is in effect or when you
explicitly specify a backtracking quantifier. Unlike C<token>, it also assumes
C<:words>, making it equivalent to

    rule :ratchet :words { ... }

You can't run away  forever,  but there's  nothing wrong with  getting a
good head start.  You want to shut out the night,  you want to shut down
the  sun,  you  want  to  shut  away  the  pieces  of  a  broken  heart.
`Rock and Roll Dreams Come True' (Steinman)

Thread Previous Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About