SmaCC__CScanner.st
author vranyj1
Thu, 10 Apr 2008 09:11:12 +0000
changeset 1 b8cca2663544
child 5 79cd4e3c7011
permissions -rw-r--r--
Initial import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     1
"{ Package: 'stx:goodies/smaCC' }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     3
"{ NameSpace: SmaCC }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     4
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     5
SmaCCScanner subclass:#CScanner
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:'typeNames'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     7
	classVariableNames:''
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     8
	poolDictionaries:''
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     9
	category:'SmaCC-Example Parsers'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    10
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    11
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    12
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    13
!CScanner class methodsFor:'generated-comments'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    14
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    15
scannerDefinitionComment
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    16
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    17
	"<H>: [a-fA-F0-9]	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    18
<IS>: [uUlL]	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    19
<D>: [0-9]	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
<E>: [Ee][\+\-]?<D>+	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
<FS>: [fFlL]	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
<ELLIPSIS> : \.\.\. ;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
<comment>: \/ \*	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
<LETTER> : [a-zA-Z_] ;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
<DIGIT> : [0-9] ;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
<IDENTIFIER>: <LETTER> (<LETTER>|<DIGIT>)*	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
<CONSTANT>: (0[xX]<H>+<IS>?) | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
				(<D>+<IS>?) | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
				(<D>+<E><FS>?) | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
				<D>*\.<D>+<E>?<FS>? | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
				(L? \' ( (\\ .) | ([^\\\""]) )+ \')	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
<STRING_LITERAL>: L? \"" ( (\\ .) | ([^\\\""]) )* \""	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
<LEFT_BLOCK>: \[ | (\< \:)	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
<RIGHT_BLOCK>: \] | (\: \>)	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
<LEFT_BRACE>: \{ | (\< \%)	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
<RIGHT_BRACE>: \} | (\% \>)	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    40
<whitespace>: \s+	;"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    41
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    42
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    43
!CScanner class methodsFor:'generated-initialization'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    44
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
initializeKeywordMap
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
	keywordMap := Dictionary new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
	#(#(#IDENTIFIER 'auto' 62) #(#IDENTIFIER 'break' 37) #(#IDENTIFIER 'case' 45) #(#IDENTIFIER 'char' 67) #(#IDENTIFIER 'const' 38) #(#IDENTIFIER 'continue' 49) #(#IDENTIFIER 'default' 41) #(#IDENTIFIER 'do' 48) #(#IDENTIFIER 'double' 52) #(#IDENTIFIER 'else' 43) #(#IDENTIFIER 'enum' 42) #(#IDENTIFIER 'extern' 60) #(#IDENTIFIER 'float' 71) #(#IDENTIFIER 'for' 47) #(#IDENTIFIER 'goto' 50) #(#IDENTIFIER 'if' 51) #(#IDENTIFIER 'int' 69) #(#IDENTIFIER 'long' 68) #(#IDENTIFIER 'register' 73) #(#IDENTIFIER 'return' 65) #(#IDENTIFIER 'short' 66) #(#IDENTIFIER 'signed' 46) #(#IDENTIFIER 'sizeof' 32) #(#IDENTIFIER 'static' 70) #(#IDENTIFIER 'struct' 44) #(#IDENTIFIER 'switch' 54) #(#IDENTIFIER 'typedef' 64) #(#IDENTIFIER 'union' 39) #(#IDENTIFIER 'unsigned' 55) #(#IDENTIFIER 'void' 72) #(#IDENTIFIER 'volatile' 40) #(#IDENTIFIER 'while' 53)) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
		do: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
			[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
			(keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
	^keywordMap
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
!CScanner class methodsFor:'public'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
needsLineNumbers
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
	^true
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
!CScanner methodsFor:'default token handling'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
comment
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
	| char |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
	[[(char := stream next) isNil or: [char == $*]] whileFalse.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
	stream atEnd ifTrue: [self scannerError].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
	stream peekFor: $/] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
			whileFalse.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
	^self whitespace
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
!CScanner methodsFor:'generated-scanner'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
scan1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
	currentCharacter isDigit ifTrue: [^self scan2].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
scan2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
	[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
	currentCharacter isDigit] whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
	(currentCharacter == $F 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
		or: [currentCharacter == $L or: [currentCharacter == $f or: [currentCharacter == $l]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
			ifTrue: [^self recordAndReportMatch: #(77)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
	(currentCharacter == $E or: [currentCharacter == $e]) ifTrue: [^self scan3].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    89
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    90
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    91
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    92
scan3
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    94
	currentCharacter isDigit ifTrue: [^self scan4].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    95
	(currentCharacter == $+ or: [currentCharacter == $-]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    96
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    97
			[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    98
			currentCharacter isDigit ifTrue: [^self scan4].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    99
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   100
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   101
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   102
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   103
scan4
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   104
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   105
	[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   106
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   107
	currentCharacter isDigit] whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   108
	(currentCharacter == $F 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   109
		or: [currentCharacter == $L or: [currentCharacter == $f or: [currentCharacter == $l]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   110
			ifTrue: [^self recordAndReportMatch: #(77)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   111
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   112
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   113
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   114
scan5
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   115
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   116
	(currentCharacter <= $!! 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   117
		or: [(currentCharacter between: $# and: $[) or: [currentCharacter >= $]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   118
			ifTrue: [^self scan7].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   119
	currentCharacter == $\ ifTrue: [^self scan6].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   120
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   121
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   122
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   123
scan6
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   124
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   125
	^self scan7
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   126
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   127
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   128
scan7
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   129
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   130
	[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   131
	currentCharacter <= $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   132
			[(currentCharacter between: $# and: $&) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   133
				or: [(currentCharacter between: $( and: $[) or: [currentCharacter >= $]]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   134
			whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   135
	currentCharacter == $' 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   136
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   137
			[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   138
			[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   139
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   140
			(currentCharacter <= $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   141
					[(currentCharacter between: $# and: $&) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   142
						or: [(currentCharacter between: $( and: $[) or: [currentCharacter >= $]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   143
				ifTrue: [^self scan7].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   144
			currentCharacter == $'] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   145
					whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   146
			currentCharacter == $\ ifTrue: [^self scan6].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   147
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   148
	currentCharacter == $\ ifTrue: [^self scan6].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   149
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   150
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   151
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   152
scan8
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   153
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   154
	[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   155
	[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   156
	currentCharacter <= $!! 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   157
		or: [(currentCharacter between: $# and: $[) or: [currentCharacter >= $]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   158
			whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   159
	currentCharacter == $" ifTrue: [^self recordAndReportMatch: #(78)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   160
	currentCharacter == $\] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   161
			whileTrue: [self step].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   162
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   163
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   164
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   165
scan9
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   166
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   167
	[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   168
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   169
	currentCharacter isDigit] whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   170
	(currentCharacter == $L 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   171
		or: [currentCharacter == $U or: [currentCharacter == $l or: [currentCharacter == $u]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   172
			ifTrue: [^self recordAndReportMatch: #(77)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   173
	(currentCharacter == $E or: [currentCharacter == $e]) ifTrue: [^self scan3].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   174
	currentCharacter == $. ifTrue: [^self scan1].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   175
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   176
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   177
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   178
scanForToken
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   179
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   180
	((currentCharacter between: $A and: $K) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   181
			[(currentCharacter between: $M and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   182
				or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   183
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   184
			[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   185
			[self recordMatch: #IDENTIFIER.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   186
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   187
			currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   188
					[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   189
						or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   190
					whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   191
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   192
	(currentCharacter between: $1 and: $9) ifTrue: [^self scan9].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   193
	((currentCharacter between: $	 and: $
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   194
) or: [currentCharacter == $ ]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   195
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   196
			[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   197
			[self recordMatch: #whitespace.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   198
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   199
			(currentCharacter between: $	 and: $
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   200
) or: [currentCharacter == $ ]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   201
					whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   202
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   203
	currentCharacter == $!! 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   204
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   205
			[self recordMatch: #(31).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   206
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   207
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(3)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   208
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   209
	currentCharacter == $" ifTrue: [^self scan8].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   210
	currentCharacter == $% 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   211
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   212
			[self recordMatch: #(13).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   213
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   214
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(36)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   215
			currentCharacter == $> ifTrue: [^self recordAndReportMatch: #(82)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   216
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   217
	currentCharacter == $& 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   218
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   219
			[self recordMatch: #(24).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   220
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   221
			currentCharacter == $& ifTrue: [^self recordAndReportMatch: #(6)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   222
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(58)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   223
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   224
	currentCharacter == $' ifTrue: [^self scan5].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   225
	currentCharacter == $( ifTrue: [^self recordAndReportMatch: #(25)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   226
	currentCharacter == $) ifTrue: [^self recordAndReportMatch: #(20)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   227
	currentCharacter == $* 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   228
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   229
			[self recordMatch: #(35).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   230
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   231
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(10)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   232
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   233
	currentCharacter == $+ 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   234
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   235
			[self recordMatch: #(34).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   236
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   237
			currentCharacter == $+ ifTrue: [^self recordAndReportMatch: #(21)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   238
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(18)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   239
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   240
	currentCharacter == $, ifTrue: [^self recordAndReportMatch: #(22)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   241
	currentCharacter == $- 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   242
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   243
			[self recordMatch: #(29).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   244
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   245
			currentCharacter == $- ifTrue: [^self recordAndReportMatch: #(26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   246
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(56)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   247
			currentCharacter == $> ifTrue: [^self recordAndReportMatch: #(19)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   248
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   249
	currentCharacter == $. 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   250
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   251
			[self recordMatch: #(23).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   252
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   253
			currentCharacter isDigit ifTrue: [^self scan2].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   254
			currentCharacter == $. 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   255
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   256
					[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   257
					currentCharacter == $. ifTrue: [^self recordAndReportMatch: #(74)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   258
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   259
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   260
	currentCharacter == $/ 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   261
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   262
			[self recordMatch: #(30).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   263
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   264
			currentCharacter == $* ifTrue: [^self recordAndReportMatch: #comment].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   265
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(12)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   266
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   267
	currentCharacter == $0 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   268
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   269
			[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   270
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   271
			currentCharacter isDigit ifTrue: [^self scan9].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   272
			(currentCharacter == $L 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   273
				or: [currentCharacter == $U or: [currentCharacter == $l or: [currentCharacter == $u]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   274
					ifTrue: [^self recordAndReportMatch: #(77)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   275
			(currentCharacter == $E or: [currentCharacter == $e]) ifTrue: [^self scan3].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   276
			(currentCharacter == $X or: [currentCharacter == $x]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   277
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   278
					[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   279
					(currentCharacter isHexDigit or: [currentCharacter between: $a and: $f]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   280
						ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   281
							[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   282
							[self recordMatch: #(77).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   283
							self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   284
							currentCharacter isHexDigit or: [currentCharacter between: $a and: $f]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   285
									whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   286
							(currentCharacter == $L 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   287
								or: [currentCharacter == $U or: [currentCharacter == $l or: [currentCharacter == $u]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   288
									ifTrue: [^self recordAndReportMatch: #(77)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   289
							^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   290
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   291
			currentCharacter == $. ifTrue: [^self scan1].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   292
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   293
	currentCharacter == $: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   294
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   295
			[self recordMatch: #(11).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   296
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   297
			currentCharacter == $> ifTrue: [^self recordAndReportMatch: #(80)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   298
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   299
	currentCharacter == $; ifTrue: [^self recordAndReportMatch: #(59)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   300
	currentCharacter == $< 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   301
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   302
			[self recordMatch: #(17).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   303
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   304
			currentCharacter == $% ifTrue: [^self recordAndReportMatch: #(81)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   305
			currentCharacter == $: ifTrue: [^self recordAndReportMatch: #(79)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   306
			currentCharacter == $< 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   307
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   308
					[self recordMatch: #(27).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   309
					self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   310
					currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(33)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   311
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   312
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(2)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   313
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   314
	currentCharacter == $= 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   315
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   316
			[self recordMatch: #(14).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   317
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   318
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(1)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   319
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   320
	currentCharacter == $> 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   321
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   322
			[self recordMatch: #(7).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   323
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   324
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(5)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   325
			currentCharacter == $> 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   326
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   327
					[self recordMatch: #(9).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   328
					self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   329
					currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(63)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   330
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   331
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   332
	currentCharacter == $? ifTrue: [^self recordAndReportMatch: #(16)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   333
	currentCharacter == $L 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   334
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   335
			[self recordMatch: #IDENTIFIER.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   336
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   337
			(currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   338
					[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   339
						or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   340
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   341
					[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   342
					[self recordMatch: #IDENTIFIER.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   343
					self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   344
					currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   345
							[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   346
								or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   347
							whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   348
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   349
			currentCharacter == $" ifTrue: [^self scan8].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   350
			currentCharacter == $' ifTrue: [^self scan5].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   351
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   352
	currentCharacter == $[ ifTrue: [^self recordAndReportMatch: #(79)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   353
	currentCharacter == $] ifTrue: [^self recordAndReportMatch: #(80)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   354
	currentCharacter == $^ 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   355
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   356
			[self recordMatch: #(8).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   357
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   358
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(61)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   359
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   360
	currentCharacter == ${ ifTrue: [^self recordAndReportMatch: #(81)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   361
	currentCharacter == $| 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   362
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   363
			[self recordMatch: #(4).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   364
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   365
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(57)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   366
			currentCharacter == $| ifTrue: [^self recordAndReportMatch: #(15)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   367
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   368
	currentCharacter == $} ifTrue: [^self recordAndReportMatch: #(82)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   369
	currentCharacter == $~ ifTrue: [^self recordAndReportMatch: #(28)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   370
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   371
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   372
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   373
!CScanner methodsFor:'generated-tokens'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   374
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   375
CONSTANTId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   376
	^77
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   377
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   378
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   379
IDENTIFIERId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   380
	^76
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   381
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   382
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   383
TYPE_NAMEId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   384
	^131
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   385
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   386
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   387
emptySymbolTokenId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   388
	^146
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   389
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   390
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   391
errorTokenId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   392
	^147
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   393
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   394
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   395
!CScanner methodsFor:'initialize-release'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   396
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   397
initialize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   398
	super initialize.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   399
	typeNames := Set new
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   400
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   401
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   402
!CScanner methodsFor:'public'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   403
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   404
IDENTIFIER
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   405
	| name token |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   406
	name := outputStream contents.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   407
	matchActions := (typeNames includes: name) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   408
				ifTrue: [Array with: self TYPE_NAMEId]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   409
				ifFalse: [Array with: self IDENTIFIERId].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   410
	outputStream reset.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   411
	token := SmaCCToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   412
				value: name
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   413
				start: start
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   414
				id: matchActions.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   415
	matchActions := nil.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   416
	returnMatchBlock value: token
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   417
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   418
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   419
addTypeName: aString 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   420
	typeNames add: aString
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   421
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   422
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   423
!CScanner class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   424
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   425
version
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   426
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__CScanner.st,v 1.1 2006-02-09 21:13:27 vranyj1 Exp $'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   427
! !