PPPossessiveRepeatingParser.st
changeset 377 6112a403a52d
parent 175 3affa13c4553
equal deleted inserted replaced
376:a2656b27cace 377:6112a403a52d
     8 !
     8 !
     9 
     9 
    10 
    10 
    11 !PPPossessiveRepeatingParser methodsFor:'parsing'!
    11 !PPPossessiveRepeatingParser methodsFor:'parsing'!
    12 
    12 
    13 parseOn: aStream
    13 parseOn: aPPContext
    14 	| start element elements |
    14 	| memento element elements |
    15 	start := aStream position.
    15 	memento := aPPContext remember.
    16 	elements := OrderedCollection new.
    16 	elements := OrderedCollection new.
    17 	[ elements size < min ] whileTrue: [
    17 	[ elements size < min ] whileTrue: [
    18 		(element := parser parseOn: aStream) isPetitFailure ifTrue: [
    18 		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
    19 			aStream position: start.
    19 			aPPContext restore: memento.
    20 			^ element ].
    20 			^ element ].
    21 		elements addLast: element ].
    21 		elements addLast: element ].
    22 	[ elements size < max ] whileTrue: [
    22 	[ elements size < max ] whileTrue: [
    23 	 	(element := parser parseOn: aStream) isPetitFailure
    23 	 	(element := parser parseOn: aPPContext) isPetitFailure
    24 			ifTrue: [ ^ elements asArray ].
    24 			ifTrue: [ ^ elements asArray ].
    25 		elements addLast: element ].
    25 		elements addLast: element ].
    26 	^ elements asArray
    26 	^ elements asArray
    27 ! !
    27 ! !
    28 
    28