On Fri, Jan 20, 2017 at 04:57:51PM +0100, Tudor Girba wrote:
> Hi,
> 
> When you have questions like these, you can also use the built-in debugging 
> facilities. For example, in your case, you can see that the #any parser 
> consumed everything like this:

Ah, thanks. I was looking for this in the debugger (because I remember there 
was some extension related to PetitParser) and completely missed it in the 
playground.

> >> Am 20.01.2017 um 15:24 schrieb Peter Uhnak <i.uh...@gmail.com>:
> >> 
> >> Is PetitParser eager by default?
> >> 
> >> I've used PetitParser countless times so I am really baffled why this 
> >> doesn't work
> >> 
> >> str := 'a0b'.
> >> #any asParser star, #digit asParser, #any asParser star parse: str.
> >> 
> >> -> PPFailure (input expected at: 3)
> >> 
> > 
> > PetitParser is not greedy per default. But back tracking only works if a 
> > parser fails. Using , creates a sequence of combined parsers. If one fails 
> > the whole sequence fails. As a star parser always succeeds it would be huge 
> > luck if your rule would succeed. The probability that the parser consumes 
> > exactly one character is not high. Maybe negating the first sequence part 
> > is what you want

This is not just about one character.

s := 'hello 123 world'.
#any asParser star , #digit asParser plus , #any asParser star parse: s.

But from your explanation my understanding is that this is actually not 
possible with #any.
Basically I was looking for the PetitParser equivalent of .*?\d+.* regex (note 
that even in greedy form the regex wouldn't fail because it would leave the 
last digit for \d)

Peter

Reply via email to