[Pharo-dev] petit parser longest match
cunningham.cb at gmail.com
Wed Nov 20 16:35:08 EST 2013
Ho about this (replacement for yours, or just replace in PPChoiceParser -
but it will result in different behavior for that method outside of your
particular parser, so beware):
"This is optimized code that avoids unnecessary block activations, do not
change. When all choices fail, the last failure is answered."
| element longest |
longest := #( 0 nil ).
1 to: parsers size do: [ :index |
element := (parsers at: index)
ifTrue: [ aStream position > longest first ifTrue: [ longest at: 1 put:
aStream position; at: 2 put: element ] ]
ifFalse: [ ^ element ] ].
aStream position: longest first.
I had a need for it in the past (and, just now, in fact - so minimally
tested just now).
On Wed, Nov 20, 2013 at 2:15 AM, Norbert Hartl <norbert at hartl.name> wrote:
> I talked to Lukas two years ago about parsing the longest match . He
> committed it to PetitBeta back then. Now I need it and I had a look at the
> current parsers but didn’t find one that can do the same. Is there a parser
> that can do longest match?
> If not I would propose adding that to the default petit parser package.
> Lukas’ proposal back then was
> LongestChoiceParser>>parseOn: aStream
> | start element longestEnd longestElement |
> start := aStream position.
> 1 to: parsers size do: [ :index |
> element := (parsers at: index)
> parseOn: aStream.
> (longestEnd isNil or: [ longestEnd < aStream position ]) ifTrue: [
> longestEnd := aStream position.
> longestElement := element ].
> aStream position: start ].
> aStream position: longestEnd.
> ^ longestElement
>  http://www.iam.unibe.ch/pipermail/moose-dev/2011-July/009365.html
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pharo-dev