"{ Package: 'squeak:petitparser' }"
PPListParser subclass:#PPSequenceParser
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'PetitParser-Parsers'
!
PPSequenceParser comment:'A parser that parses a sequence of parsers.'
!
!PPSequenceParser methodsFor:'operations'!
, aRule
^ self copyWith: aRule
!
map: aBlock
^ self ==> [ :nodes | aBlock valueWithArguments: nodes ]
!
permutation: anArrayOfIntegers
"Answer a permutation of the receivers sequence."
anArrayOfIntegers do: [ :index |
(index isInteger and: [ index between: 1 and: parsers size ])
ifFalse: [ self error: 'Invalid permutation index: ' , index printString ] ].
^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ]
! !
!PPSequenceParser methodsFor:'parsing'!
parseOn: aStream
"This is optimized code that avoids unnecessary block activations, do not change."
| start elements element |
start := aStream position.
elements := Array new: parsers size.
1 to: parsers size do: [ :index |
element := (parsers at: index)
parseOn: aStream.
element isPetitFailure ifTrue: [
aStream position: start.
^ element ].
elements at: index put: element ].
^ elements
! !
!PPSequenceParser class methodsFor:'documentation'!
version_SVN
^ '$Id: PPSequenceParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
! !