SmaCC__StScanner.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 07 Dec 2016 13:18:16 +0000
changeset 26 b2c091b8cea1
parent 25 5a6921729520
permissions -rw-r--r--
Fixed initialization of SmaCCEdge There's no `UnicodeString` anymore. Changed: WriteStream on: UnicodeString new to: String new writeStream
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:#StScanner
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:''
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
!StScanner class methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    14
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    15
frequencyTable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    16
	^#(0.0 1.31372e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0481767 0.0 0.0 0.0 0.0252514 0.0 0.0 2.62743e-7 1.31372e-7 5.25487e-7 1.31372e-7 1.31372e-7 0.0 1.31372e-7 0.0 2.62743e-7 0.0 1.31372e-7 7.8823e-7 2.62743e-7 2.62743e-7 1.31372e-7 5.25487e-7 0.106011 5.13007e-5 0.004554 0.00655584 2.41133e-4 3.60615e-5 1.93248e-4 0.00410241 0.00463893 0.0046369 2.82712e-4 4.64268e-4 0.0011675 9.75895e-4 0.00982753 2.26945e-4 0.00795055 0.00590903 0.0036363 0.00220212 0.00180485 0.00224265 0.00183191 0.00138545 0.00146217 0.00115246 0.0248349 0.00129723 7.50395e-4 0.00496762 8.97532e-4 1.44378e-4 0.00164497 0.00403659 0.00332443 0.00587547 0.00266882 0.00223293 0.00382922 9.91266e-4 9.99673e-4 0.00418163 3.27773e-5 6.31044e-4 0.00271013 0.00248917 0.00292348 0.00278226 0.00359742 7.08751e-4 0.00239287 0.00749351 0.00486778 0.00145908 0.00167453 0.00112251 2.2458e-4 2.32856e-4 4.40752e-5 0.00467815 1.22701e-4 0.00470173 0.00298378 7.73451e-4 2.634e-4 0.0515694 0.00918972 0.0257636 0.0226939 0.09244 0.0167193 0.0108988 0.0138365 0.042864 9.52379e-4 0.00366494 0.0402202 0.0159142 0.0440905 0.0418992 0.0154463 5.66869e-4 0.043972 0.0443068 0.0543899 0.0180997 0.00593537 0.00725816 0.00494884 0.00808567 0.00128285 7.45009e-4 0.00281083 7.45206e-4 1.08907e-4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 3.28429e-7 0.0 0.0 1.97058e-7 0.0 0.0 0.0 0.0 3.94115e-7 6.56859e-8 0.0 2.62743e-7 1.31372e-7 0.0 1.31372e-7 1.31372e-7 0.0 0.0 1.97058e-7 1.31372e-7 6.56859e-8 1.31372e-7 0.0 0.0 7.8823e-7 0.0 0.0 1.31372e-7 1.31372e-7 4.59801e-7 7.8823e-7 0.0 9.85288e-7 5.25487e-7 1.31372e-7 6.56859e-8 1.05097e-6 0.0 2.62743e-7 0.0 1.97058e-7 4.59801e-7 1.97058e-7 5.25487e-7 2.62743e-7 0.0 1.51078e-6 5.91173e-7 1.11666e-6 0.0 1.97058e-7 8.53916e-7 1.57646e-6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.25487e-7 0.0 0.0 0.0 0.0 0.0 0.0 7.8823e-7 0.0 2.62743e-7 0.0 0.0 3.28429e-7 1.31372e-7 0.0 2.62743e-7 0.0 3.28429e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.62743e-7 0.0 5.25487e-7 0.0 0.0 1.31372e-7 0.0 0.0 0.0 0.0)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    17
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    18
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    19
!StScanner class methodsFor:'generated-comments'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
scannerDefinitionComment
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
	"<name>	:	[a-zA-Z_] \w*	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
<number>:	[0-9]	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
<negative_number>	:	\- <number>	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
<string>	:	\'  [^\']* \' (\' [^\']* \')*	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
<keyword>	:	<name> \:	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
<multikeyword>	:	<name> \: (<name> \: )+	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
<binary_symbol>	:	[\~\-\!!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!!\@\%\&\*\+\=\\\|\?\/\>\<\,]?	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
<whitespace>	:	\s+	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
<comment>	:	\"" [^\""]* \""	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
<dotted_name>	:	<name> (\. <name>)+	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
<character>	:	\$ .	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
<variable_assignment> : <name> \: \=	;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
<any_char> : . ; # For VW literal arrays that handle #(;) -> #(#';')"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
!StScanner class methodsFor:'generated-initialization'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    40
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    41
initializeKeywordMap
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    42
	keywordMap := Dictionary new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    43
	#(#(32 '0' #number) #(32 '1' #number) #(32 '2' #number) #(32 '3' #number) #(32 '4' #number) #(32 '5' #number) #(32 '6' #number) #(32 '7' #number) #(32 '8' #number) #(32 '9' #number) #(20 'false' 13) #(20 'nil' 10) #(20 'true' 14)) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    44
		do: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
			[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
			(keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
	^keywordMap
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
!StScanner methodsFor:'generated-scanner'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
scan1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
	[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
	currentCharacter ~~ $'] whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
	^self scan2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
scan2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
	self recordMatch: #(23).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
	currentCharacter == $' ifTrue: [^self scan1].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
scan3
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
	
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
	[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
	currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
			[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
				or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
			whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
	currentCharacter == $: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
			[self recordMatch: #(25).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
			((currentCharacter between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
				or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
					ifTrue: [^self scan3].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
scan4
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
	((currentCharacter between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
		or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
			ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    89
				[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    90
				[self recordMatch: #(29).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    91
				self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    92
				currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
						[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    94
							or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    95
						whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    96
				currentCharacter == $. ifTrue: [^self scan4].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    97
				^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    98
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    99
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   100
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   101
scan5
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   102
	self recordMatch: #(24).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   103
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   104
	((currentCharacter between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   105
		or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   106
			ifTrue: [^self scan3].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   107
	currentCharacter == $= ifTrue: [^self recordAndReportMatch: #variable_assignment].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   108
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   109
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   110
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   111
scanForToken
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   112
	self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   113
	((currentCharacter between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   114
		or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   115
			ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   116
				[self recordMatch: #(20 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   117
				self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   118
				(currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   119
						[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   120
							or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   121
					ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   122
						[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   123
						[self recordMatch: #(20).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   124
						self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   125
						currentCharacter isHexDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   126
								[(currentCharacter between: $G and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   127
									or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   128
								whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   129
						currentCharacter == $: ifTrue: [^self scan5].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   130
						currentCharacter == $. ifTrue: [^self scan4].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   131
						^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   132
				currentCharacter == $: ifTrue: [^self scan5].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   133
				currentCharacter == $. ifTrue: [^self scan4].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   134
				^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   135
	((currentCharacter between: $	 and: $
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   136
) or: [currentCharacter == $ ]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   137
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   138
			[self recordMatch: #whitespace.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   139
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   140
			((currentCharacter between: $	 and: $
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   141
) or: [currentCharacter == $ ]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   142
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   143
					[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   144
					[self recordMatch: #whitespace.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   145
					self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   146
					(currentCharacter between: $	 and: $
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   147
) or: [currentCharacter == $ ]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   148
							whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   149
					^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   150
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   151
	(currentCharacter isDigit or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   152
			[currentCharacter <= $ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   153
					[(currentCharacter between: $ and: $) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   154
						or: [currentCharacter == $` or: [currentCharacter >= $]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   155
		ifTrue: [^self recordAndReportMatch: #(32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   156
	currentCharacter == $: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   157
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   158
			[self recordMatch: #(16 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   159
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   160
			currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(11)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   161
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   162
	currentCharacter == $. ifTrue: [^self recordAndReportMatch: #(5 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   163
	(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   164
			[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   165
					[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   166
							[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   167
									[currentCharacter == $= or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   168
											[(currentCharacter between: $? and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   169
												or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   170
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   171
			[self recordMatch: #(26 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   172
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   173
			(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   174
					[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   175
							[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   176
									[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   177
											[(currentCharacter between: $< and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   178
												or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   179
				ifTrue: [^self recordAndReportMatch: #(26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   180
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   181
	currentCharacter == $# ifTrue: [^self recordAndReportMatch: #(4 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   182
	currentCharacter == $] ifTrue: [^self recordAndReportMatch: #(12 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   183
	currentCharacter == $[ ifTrue: [^self recordAndReportMatch: #(18 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   184
	currentCharacter == $( ifTrue: [^self recordAndReportMatch: #(2 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   185
	currentCharacter == $) ifTrue: [^self recordAndReportMatch: #(1 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   186
	currentCharacter == $" 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   187
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   188
			[self recordMatch: #(32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   189
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   190
			currentCharacter ~~ $" 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   191
				ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   192
					[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   193
					[self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   194
					currentCharacter ~~ $"] whileTrue.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   195
					^self recordAndReportMatch: #comment].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   196
			currentCharacter == $" ifTrue: [^self recordAndReportMatch: #comment].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   197
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   198
	currentCharacter == $' 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   199
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   200
			[self recordMatch: #(32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   201
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   202
			currentCharacter ~~ $' ifTrue: [^self scan1].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   203
			currentCharacter == $' ifTrue: [^self scan2].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   204
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   205
	currentCharacter == $^ ifTrue: [^self recordAndReportMatch: #(19 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   206
	currentCharacter == $| 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   207
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   208
			[self recordMatch: #(17 26 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   209
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   210
			(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   211
					[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   212
							[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   213
									[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   214
											[(currentCharacter between: $< and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   215
												or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   216
				ifTrue: [^self recordAndReportMatch: #(26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   217
			currentCharacter == $| ifTrue: [^self recordAndReportMatch: #(15 26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   218
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   219
	currentCharacter == $; ifTrue: [^self recordAndReportMatch: #(9 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   220
	currentCharacter == $- 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   221
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   222
			[self recordMatch: #(26 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   223
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   224
			currentCharacter isDigit ifTrue: [^self recordAndReportMatch: #negative_number].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   225
			(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   226
					[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   227
							[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   228
									[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   229
											[(currentCharacter between: $< and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   230
												or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   231
				ifTrue: [^self recordAndReportMatch: #(26)].
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: #(7 26 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   236
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   237
			(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   238
					[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   239
							[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   240
									[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   241
											[(currentCharacter between: $< and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   242
												or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   243
				ifTrue: [^self recordAndReportMatch: #(26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   244
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   245
	currentCharacter == $< 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   246
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   247
			[self recordMatch: #(8 26 32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   248
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   249
			(currentCharacter == $!! or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   250
					[(currentCharacter between: $% and: $&) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   251
							[(currentCharacter between: $* and: $,) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   252
									[currentCharacter == $/ or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   253
											[(currentCharacter between: $< and: $@) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   254
												or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   255
				ifTrue: [^self recordAndReportMatch: #(26)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   256
			^self reportLastMatch].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   257
	currentCharacter == $} ifTrue: [^self recordAndReportMatch: #(3 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   258
	currentCharacter == ${ ifTrue: [^self recordAndReportMatch: #(6 32)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   259
	currentCharacter == $$ 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   260
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   261
			[self recordMatch: #(32).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   262
			self step.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   263
			^self recordAndReportMatch: #(30)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   264
	^self reportLastMatch
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   265
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   266
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   267
!StScanner methodsFor:'generated-tokens'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   268
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   269
binary_symbolId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   270
	^26
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   271
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   272
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   273
emptySymbolTokenId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   274
	^63
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   275
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   276
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   277
errorTokenId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   278
	^64
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   279
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   280
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   281
nameId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   282
	^20
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   283
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   284
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   285
negative_numberId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   286
	^22
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   287
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   288
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   289
numberId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   290
	^21
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   291
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   292
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   293
!StScanner methodsFor:'public'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   294
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   295
negative_number
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   296
	stream skip: -2.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   297
	self scanNumber: self negative_numberId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   298
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   299
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   300
number
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   301
	stream skip: -1.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   302
	self scanNumber: self numberId
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   303
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   304
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   305
scanNumber: id 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   306
	| token number |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   307
	number := Number readFrom: stream.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   308
	outputStream reset.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   309
	token := SmaCCToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   310
				value: number
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   311
				start: start
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   312
				id: (Array with: id).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   313
	matchActions := nil.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   314
	returnMatchBlock value: token
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   315
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   316
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   317
variable_assignment
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   318
	| token |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   319
	outputStream skip: -2.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   320
	stream skip: -2.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   321
	token := SmaCCToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   322
				value: outputStream contents
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   323
				start: start
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   324
				id: (Array with: self nameId).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   325
	outputStream reset.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   326
	matchActions := nil.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   327
	returnMatchBlock value: token
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   328
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   329
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   330
!StScanner class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   331
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   332
version
25
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   333
    ^ '$Id$'
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   334
!
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   335
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   336
version_SVN
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   337
    ^ '$Id::                                                                                                                        $'
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   338
! !
25
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 1
diff changeset
   339