MCScanner.st
author Claus Gittinger <cg@exept.de>
Wed, 22 Nov 2006 14:06:28 +0100
changeset 40 34febde6d331
child 225 4453a8f6fb4a
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCScanner
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'stream'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Monticello-Chunk Format'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCScanner class methodsFor:'as yet unclassified'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
scan: aStream
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ (self new stream: aStream) next
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
scanTokens: aString
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	"compatibility"
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	^ Array with: (self scan: aString readStream)
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
! !
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!MCScanner methodsFor:'as yet unclassified'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
next
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	| c |
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	stream skipSeparators.
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	c _ stream peek.
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	c = $# ifTrue: [c _ stream next; peek].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	c = $' ifTrue: [^ self nextString].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	c = $( ifTrue: [^ self nextArray].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
	c isAlphaNumeric ifTrue: [^ self nextSymbol].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	self error: 'Unknown token type'.	
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
nextArray
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	stream next. "("
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	^ Array streamContents:
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
		[:s |
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
		[stream skipSeparators.
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
		(stream peek = $)) or: [stream atEnd]] whileFalse: [s nextPut: self next].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
		stream next = $) ifFalse: [self error: 'Unclosed array']]
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
nextString
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	^ stream nextDelimited: $'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
nextSymbol
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	^ (String streamContents:
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
		[:s |
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
		[stream peek isAlphaNumeric] whileTrue: [s nextPut: stream next]]) asSymbol
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
			
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
stream: aStream
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	stream _ aStream
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
! !
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!MCScanner class methodsFor:'documentation'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
version
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCScanner.st,v 1.1 2006-11-22 13:06:28 cg Exp $'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
! !