author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Wed, 03 Jun 2015 06:23:49 +0100 | |
changeset 481 | 34ee0d3c72e7 |
parent 421 | 7e08b31e0dae |
child 502 | 1e45d3c96ec5 |
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 |
|
421
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
12 |
|
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
13 |
|
0 | 14 |
!PPSequenceParser methodsFor:'operations'! |
15 |
||
16 |
, aRule |
|
17 |
^ self copyWith: aRule |
|
18 |
! |
|
19 |
||
20 |
permutation: anArrayOfIntegers |
|
21 |
"Answer a permutation of the receivers sequence." |
|
12 | 22 |
|
0 | 23 |
anArrayOfIntegers do: [ :index | |
24 |
(index isInteger and: [ index between: 1 and: parsers size ]) |
|
25 |
ifFalse: [ self error: 'Invalid permutation index: ' , index printString ] ]. |
|
26 |
^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ] |
|
27 |
! ! |
|
28 |
||
180 | 29 |
!PPSequenceParser methodsFor:'operators-mapping'! |
30 |
||
31 |
map: aBlock |
|
32 |
^ aBlock numArgs = self children size |
|
33 |
ifTrue: [ self ==> [ :nodes | aBlock valueWithArguments: nodes ] ] |
|
34 |
ifFalse: [ self error: aBlock numArgs asString , ' arguments expected.' ] |
|
35 |
! ! |
|
36 |
||
0 | 37 |
!PPSequenceParser methodsFor:'parsing'! |
38 |
||
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
39 |
parseOn: aPPContext |
0 | 40 |
"This is optimized code that avoids unnecessary block activations, do not change." |
12 | 41 |
|
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
42 |
| memento elements element | |
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
43 |
memento := aPPContext remember. |
0 | 44 |
elements := Array new: parsers size. |
45 |
1 to: parsers size do: [ :index | |
|
12 | 46 |
element := (parsers at: index) |
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
47 |
parseOn: aPPContext. |
0 | 48 |
element isPetitFailure ifTrue: [ |
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
180
diff
changeset
|
49 |
aPPContext restore: memento. |
0 | 50 |
^ element ]. |
51 |
elements at: index put: element ]. |
|
52 |
^ elements |
|
53 |
! ! |
|
54 |
||
55 |
!PPSequenceParser class methodsFor:'documentation'! |
|
56 |
||
12 | 57 |
version |
180 | 58 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
12 | 59 |
! |
60 |
||
61 |
version_CVS |
|
180 | 62 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
12 | 63 |
! |
64 |
||
421
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
65 |
version_HG |
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
66 |
|
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
67 |
^ '$Changeset: <not expanded> $' |
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
68 |
! |
7e08b31e0dae
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
69 |
|
0 | 70 |
version_SVN |
180 | 71 |
^ '$Id: PPSequenceParser.st,v 1.4 2014-03-04 14:33:25 cg Exp $' |
0 | 72 |
! ! |
180 | 73 |