# HG changeset patch # User Claus Gittinger # Date 1393943567 -3600 # Node ID f7d5e10c3fe8e818601709bf23c2c93e01c6b783 # Parent 749f1a5c6d3e22089f39a8f36b0cead5d9aae96f initial checkin diff -r 749f1a5c6d3e -r f7d5e10c3fe8 PPLazyRepeatingParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPLazyRepeatingParser.st Tue Mar 04 15:32:47 2014 +0100 @@ -0,0 +1,43 @@ +"{ Package: 'stx:goodies/petitparser' }" + +PPLimitedRepeatingParser subclass:#PPLazyRepeatingParser + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'PetitParser-Parsers' +! + + +!PPLazyRepeatingParser methodsFor:'parsing'! + +parseOn: aStream + | start element elements | + start := aStream position. + elements := OrderedCollection new. + [ elements size < min ] whileTrue: [ + (element := parser parseOn: aStream) isPetitFailure ifTrue: [ + aStream position: start. + ^ element ]. + elements addLast: element ]. + [ self matchesLimitOn: aStream ] whileFalse: [ + elements size < max ifFalse: [ + aStream position: start. + ^ PPFailure message: 'overflow' at: start ]. + element := parser parseOn: aStream. + element isPetitFailure ifTrue: [ + aStream position: start. + ^ element ]. + elements addLast: element ]. + ^ elements asArray +! ! + +!PPLazyRepeatingParser class methodsFor:'documentation'! + +version + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPLazyRepeatingParser.st,v 1.1 2014-03-04 14:32:47 cg Exp $' +! + +version_CVS + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPLazyRepeatingParser.st,v 1.1 2014-03-04 14:32:47 cg Exp $' +! ! +