equal
deleted
inserted
replaced
|
1 "{ Package: 'squeak:petitparser' }" |
|
2 |
|
3 PPLiteralParser subclass:#PPLiteralSequenceParser |
|
4 instanceVariableNames:'size' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitParser-Parsers' |
|
8 ! |
|
9 |
|
10 PPLiteralSequenceParser comment:'A parser accepts a sequence of literal objects, such as a String. This is an optimization to avoid having to compose longer sequences from PPSequenceParser.' |
|
11 ! |
|
12 |
|
13 |
|
14 !PPLiteralSequenceParser methodsFor:'accessing'! |
|
15 |
|
16 size |
|
17 "Answer the sequence size of the receiver." |
|
18 |
|
19 ^ size |
|
20 ! ! |
|
21 |
|
22 !PPLiteralSequenceParser methodsFor:'initialization'! |
|
23 |
|
24 initializeOn: anObject message: aString |
|
25 super initializeOn: anObject message: aString. |
|
26 size := literal size |
|
27 ! ! |
|
28 |
|
29 !PPLiteralSequenceParser methodsFor:'operators'! |
|
30 |
|
31 caseInsensitive |
|
32 "Answer a parser that can parse the receiver case-insensitive." |
|
33 |
|
34 literal asUppercase = literal asLowercase ifTrue: [ ^ self ]. |
|
35 ^ PPPredicateSequenceParser on: [ :value | literal sameAs: value ] message: message size: size |
|
36 ! ! |
|
37 |
|
38 !PPLiteralSequenceParser methodsFor:'parsing'! |
|
39 |
|
40 parseOn: aStream |
|
41 | position result | |
|
42 position := aStream position. |
|
43 result := aStream next: size. |
|
44 literal = result ifTrue: [ ^ result ]. |
|
45 aStream position: position. |
|
46 ^ PPFailure message: message at: aStream position |
|
47 ! ! |
|
48 |
|
49 !PPLiteralSequenceParser class methodsFor:'documentation'! |
|
50 |
|
51 version_SVN |
|
52 ^ '$Id: PPLiteralSequenceParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $' |
|
53 ! ! |