PPLiteralSequenceParser.st
changeset 0 739fe9b7253e
child 4 90de244a7fa2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PPLiteralSequenceParser.st	Thu Aug 18 20:56:17 2011 +0200
@@ -0,0 +1,53 @@
+"{ Package: 'squeak:petitparser' }"
+
+PPLiteralParser subclass:#PPLiteralSequenceParser
+	instanceVariableNames:'size'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitParser-Parsers'
+!
+
+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.'
+!
+
+
+!PPLiteralSequenceParser methodsFor:'accessing'!
+
+size
+	"Answer the sequence size of the receiver."
+
+	^ size
+! !
+
+!PPLiteralSequenceParser methodsFor:'initialization'!
+
+initializeOn: anObject message: aString
+	super initializeOn: anObject message: aString.
+	size := literal size
+! !
+
+!PPLiteralSequenceParser methodsFor:'operators'!
+
+caseInsensitive
+	"Answer a parser that can parse the receiver case-insensitive."
+	
+	literal asUppercase = literal asLowercase ifTrue: [ ^ self ].
+	^ PPPredicateSequenceParser on: [ :value | literal sameAs: value ] message: message size: size
+! !
+
+!PPLiteralSequenceParser methodsFor:'parsing'!
+
+parseOn: aStream
+	| position result |
+	position := aStream position.
+	result := aStream next: size.
+	literal = result ifTrue: [ ^ result ].
+	aStream position: position.
+	^ PPFailure message: message at: aStream position
+! !
+
+!PPLiteralSequenceParser class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id: PPLiteralSequenceParser.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
+! !