|
1 "{ Package: 'stx:goodies/petitparser' }" |
|
2 |
|
3 PPLimitedRepeatingParser subclass:#PPGreedyRepeatingParser |
|
4 instanceVariableNames:'' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitParser-Parsers' |
|
8 ! |
|
9 |
|
10 |
|
11 !PPGreedyRepeatingParser methodsFor:'parsing'! |
|
12 |
|
13 parseOn: aStream |
|
14 | start element elements positions | |
|
15 start := aStream position. |
|
16 elements := OrderedCollection new. |
|
17 [ elements size < min ] whileTrue: [ |
|
18 (element := parser parseOn: aStream) isPetitFailure ifTrue: [ |
|
19 aStream position: start. |
|
20 ^ element ]. |
|
21 elements addLast: element ]. |
|
22 positions := OrderedCollection with: aStream position. |
|
23 [ elements size < max and: [ (element := parser parseOn: aStream) isPetitFailure not ] ] whileTrue: [ |
|
24 elements addLast: element. |
|
25 positions addLast: aStream position ]. |
|
26 [ positions isEmpty ] whileFalse: [ |
|
27 aStream position: positions last. |
|
28 element := limit parseOn: aStream. |
|
29 element isPetitFailure ifFalse: [ |
|
30 aStream position: positions last. |
|
31 ^ elements asArray ]. |
|
32 elements isEmpty ifTrue: [ |
|
33 aStream position: start. |
|
34 ^ element ]. |
|
35 elements removeLast. |
|
36 positions removeLast ]. |
|
37 aStream position: start. |
|
38 ^ PPFailure message: 'overflow' at: start |
|
39 ! ! |
|
40 |
|
41 !PPGreedyRepeatingParser class methodsFor:'documentation'! |
|
42 |
|
43 version |
|
44 ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $' |
|
45 ! |
|
46 |
|
47 version_CVS |
|
48 ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPGreedyRepeatingParser.st,v 1.1 2014-03-04 14:32:42 cg Exp $' |
|
49 ! ! |
|
50 |