PPLiteralSequenceParser.st
changeset 0 739fe9b7253e
child 4 90de244a7fa2
equal deleted inserted replaced
-1:000000000000 0:739fe9b7253e
       
     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 ! !