author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Fri, 03 Oct 2014 02:33:08 +0100 | |
changeset 377 | 6112a403a52d |
parent 180 | 48a6757d5f01 |
child 421 | 7e08b31e0dae |
permissions | -rw-r--r-- |
4 | 1 |
"{ Package: 'stx:goodies/petitparser' }" |
0 | 2 |
|
3 |
PPListParser subclass:#PPSequenceParser |
|
4 |
instanceVariableNames:'' |
|
5 |
classVariableNames:'' |
|
6 |
poolDictionaries:'' |
|
7 |
category:'PetitParser-Parsers' |
|
8 |
! |
|
9 |
||
10 |
||
180 | 11 |
|
0 | 12 |
!PPSequenceParser methodsFor:'operations'! |
13 |
||
14 |
, aRule |
|
15 |
^ self copyWith: aRule |
|
16 |
! |
|
17 |
||
18 |
permutation: anArrayOfIntegers |
|
19 |
"Answer a permutation of the receivers sequence." |
|
12 | 20 |
|
0 | 21 |
anArrayOfIntegers do: [ :index | |
22 |
(index isInteger and: [ index between: 1 and: parsers size ]) |
|
23 |
ifFalse: [ self error: 'Invalid permutation index: ' , index printString ] ]. |
|
24 |
^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ] |
|
25 |
! ! |
|
26 |
||
180 | 27 |
!PPSequenceParser methodsFor:'operators-mapping'! |
28 |
||
29 |
map: aBlock |
|
30 |
^ aBlock numArgs = self children size |
|
31 |
ifTrue: [ self ==> [ :nodes | aBlock valueWithArguments: nodes ] ] |
|
32 |
ifFalse: [ self error: aBlock numArgs asString , ' arguments expected.' ] |
|
33 |
! ! |
|
34 |
||
0 | 35 |
!PPSequenceParser methodsFor:'parsing'! |
36 |
||
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
37 |
parseOn: aPPContext |
0 | 38 |
"This is optimized code that avoids unnecessary block activations, do not change." |
12 | 39 |
|
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
40 |
| memento elements element | |
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
41 |
memento := aPPContext remember. |
0 | 42 |
elements := Array new: parsers size. |
43 |
1 to: parsers size do: [ :index | |
|
12 | 44 |
element := (parsers at: index) |
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
45 |
parseOn: aPPContext. |
0 | 46 |
element isPetitFailure ifTrue: [ |
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
47 |
aPPContext restore: memento. |
0 | 48 |
^ element ]. |
49 |
elements at: index put: element ]. |
|
50 |
^ elements |
|
51 |
! ! |
|
52 |
||
53 |
!PPSequenceParser class methodsFor:'documentation'! |
|
54 |
||
12 | 55 |
version |
180 | 56 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
12 | 57 |
! |
58 |
||
59 |
version_CVS |
|
180 | 60 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
12 | 61 |
! |
62 |
||
0 | 63 |
version_SVN |
180 | 64 |
^ '$Id: PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
0 | 65 |
! ! |
180 | 66 |