SmaCC__SmaCCScannerParser.st
author vranyj1
Thu, 10 Apr 2008 09:11:12 +0000
changeset 1 b8cca2663544
child 15 8b8cd1701c33
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
SmaCCParser subclass:#SmaCCScannerParser
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:'tokens'
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-Scanner Generator'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    10
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    11
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    12
SmaCCScannerParser comment:'SmaCCScannerParser is the parser for the scanner definition.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    13
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    14
Instance Variables:
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    15
	tokens	<Dictionary key: String value: SmaCCRegularExpressionNode>	the tokens that are parsed
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    16
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    17
'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    18
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    19
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
!SmaCCScannerParser class methodsFor:'generated-accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
scannerClass
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
	^SmaCCScannerScanner
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
!SmaCCScannerParser class methodsFor:'generated-comments'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
parserDefinitionComment
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
	"%left	""|"";
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
%left ""("" <character> <backslashcharacter> <characterblock> <anycharacter> <tokenname>;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
%left ""*"" ""+"" ""?"" <repeat> ;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
File: Rules	 {tokens} 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
	|  {tokens};
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
Rules: Rule "";""
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
	| Rules Rule "";"" ;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    40
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    41
Rule: <tokenname> "":"" Regex {'3' position: '1' startPosition. tokens at: '1' value put: '3'. nil};
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    42
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    43
Regex: RegexTerm {'1'}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    44
	| Regex ""|"" Regex {'1' | '3'}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
	| Regex RegexTerm {'1' , '2'};
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
RegexTerm:	<character> {SmaCCCharacterRENode characters: '1' value}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
	| <anycharacter> {SmaCCCharacterRENode characters: self allCharacters}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
	| <backslashcharacter> {self nodeFor: (ReadStream on: ('1' value copyFrom: 2 to: '1' value size))} 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
	| ""("" Regex "")"" {'2'}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
	| <characterblock> {SmaCCCharacterRENode characters: (self parseCharacterBlock: '1')}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
	| <tokenname> {(tokens at: '1' value) copy}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
	| RegexTerm ""*""	{'1' repeat}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
	| RegexTerm ""+"" {'1' repeatForAtLeast: 1}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
	| RegexTerm ""?"" {'1' repeatFor: 0 to: 1}
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
	| RegexTerm <repeat> {| readStream start stop | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
					readStream := ReadStream on: ('2' value copyFrom: 2 to: '2' value size - 1). 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
					start := readStream upTo: $,. 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
					stop := readStream upToEnd.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
					'1' repeatFor: (start isEmpty ifTrue: [0] ifFalse: [start asNumber]) to: (stop isEmpty ifTrue: [(1 bitShift: 31)] ifFalse: [stop asNumber])} ;"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
!SmaCCScannerParser class methodsFor:'generated-starting states'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
startingStateForFile
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
	^1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
!SmaCCScannerParser methodsFor:'generated-reduction actions'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
reduceActionForFile1: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
	^tokens
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
reduceActionForFile2: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
	^tokens
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
reduceActionForRegex1: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
	^nodes at: 1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
reduceActionForRegex2: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
	^(nodes at: 1) | (nodes at: 3)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
reduceActionForRegex3: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
	^(nodes at: 1) , (nodes at: 2)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    89
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    90
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    91
reduceActionForRegexTerm10: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    92
	| readStream start stop |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
	readStream := ReadStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    94
				on: ((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    95
	start := readStream upTo: $,.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    96
	stop := readStream upToEnd.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    97
	^(nodes at: 1) repeatFor: (start isEmpty ifTrue: [0] ifFalse: [start asNumber])
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    98
		to: (stop isEmpty ifTrue: [1 bitShift: 31] ifFalse: [stop asNumber])
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    99
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   100
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   101
reduceActionForRegexTerm1: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   102
	^SmaCCCharacterRENode characters: (nodes at: 1) value
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   103
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   104
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   105
reduceActionForRegexTerm2: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   106
	^SmaCCCharacterRENode characters: self allCharacters
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   107
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   108
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   109
reduceActionForRegexTerm3: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   110
	^self 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   111
		nodeFor: (ReadStream on: ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size))
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   112
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   113
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   114
reduceActionForRegexTerm4: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   115
	^nodes at: 2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   116
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   117
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   118
reduceActionForRegexTerm5: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   119
	^SmaCCCharacterRENode characters: (self parseCharacterBlock: (nodes at: 1))
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   120
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   121
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   122
reduceActionForRegexTerm6: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   123
	^(tokens at: (nodes at: 1) value) copy
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   124
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   125
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   126
reduceActionForRegexTerm7: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   127
	^(nodes at: 1) repeat
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   128
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   129
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   130
reduceActionForRegexTerm8: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   131
	^(nodes at: 1) repeatForAtLeast: 1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   132
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   133
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   134
reduceActionForRegexTerm9: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   135
	^(nodes at: 1) repeatFor: 0 to: 1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   136
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   137
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   138
reduceActionForRule1: nodes
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   139
	(nodes at: 3) position: (nodes at: 1) startPosition.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   140
	tokens at: (nodes at: 1) value put: (nodes at: 3).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   141
	^nil
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   142
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   143
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   144
!SmaCCScannerParser methodsFor:'generated-tables'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   145
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   146
reduceTable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   147
	^#(
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   148
#(19 3 #reduceActionForRule1:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   149
#(20 2 #reduceFor:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   150
#(20 3 #reduceFor:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   151
#(21 1 #reduceActionForRegexTerm1:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   152
#(21 1 #reduceActionForRegexTerm2:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   153
#(21 1 #reduceActionForRegexTerm3:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   154
#(21 3 #reduceActionForRegexTerm4:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   155
#(21 1 #reduceActionForRegexTerm5:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   156
#(21 1 #reduceActionForRegexTerm6:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   157
#(21 2 #reduceActionForRegexTerm7:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   158
#(21 2 #reduceActionForRegexTerm8:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   159
#(21 2 #reduceActionForRegexTerm9:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   160
#(21 2 #reduceActionForRegexTerm10:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   161
#(22 1 #reduceActionForFile1:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   162
#(22 0 #reduceActionForFile2:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   163
#(23 1 #reduceActionForRegex1:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   164
#(23 3 #reduceActionForRegex2:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   165
#(23 2 #reduceActionForRegex3:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   166
#(24 1 #reduceFor:)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   167
)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   168
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   169
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   170
transitionTable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   171
	^#(
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   172
#[1 0 9 0 12 0 62 0 18 0 13 0 19 0 17 0 20 0 21 0 22]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   173
#[0 0 25 0 5]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   174
#[0 0 29 0 7]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   175
#[1 0 9 0 12 0 58 0 18 0 33 0 19]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   176
#[0 0 0 0 18]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   177
#[1 0 37 0 4 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 61 0 21 0 65 0 23]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   178
#[0 0 10 0 12 0 18]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   179
#[0 0 69 0 7]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   180
#[1 0 37 0 4 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 61 0 21 0 73 0 23]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   181
#[0 0 26 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   182
#[0 0 34 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   183
#[0 0 38 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   184
#[0 0 18 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   185
#[0 0 22 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   186
#[1 0 66 0 1 0 77 0 2 0 66 0 3 0 66 0 4 0 81 0 6 0 66 0 7 0 85 0 8 0 66 0 9 0 66 0 10 0 66 0 12 0 89 0 14 0 66 0 15 0 66 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   187
#[1 0 93 0 3 0 37 0 4 0 6 0 7 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 97 0 21]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   188
#[0 0 14 0 12 0 18]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   189
#[1 0 101 0 1 0 93 0 3 0 37 0 4 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 97 0 21]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   190
#[0 0 42 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   191
#[0 0 46 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   192
#[0 0 50 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   193
#[0 0 54 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   194
#[1 0 37 0 4 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 61 0 21 0 105 0 23]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   195
#[1 0 74 0 1 0 77 0 2 0 74 0 3 0 74 0 4 0 81 0 6 0 74 0 7 0 85 0 8 0 74 0 9 0 74 0 10 0 74 0 12 0 89 0 14 0 74 0 15 0 74 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   196
#[0 0 30 0 1 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 12 0 14 0 15 0 16]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   197
#[1 0 70 0 1 0 70 0 3 0 37 0 4 0 70 0 7 0 41 0 9 0 45 0 10 0 49 0 12 0 53 0 15 0 57 0 16 0 97 0 21]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   198
)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   199
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   200
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   201
!SmaCCScannerParser methodsFor:'initialize-release'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   202
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   203
initialize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   204
	super initialize.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   205
	tokens := Dictionary new
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   206
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   207
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   208
!SmaCCScannerParser methodsFor:'private'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   209
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   210
allCharacters
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   211
        ^UnicodeString withAll: ((0 to: SmaCCGrammar maximumCharacterValue) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   212
                                collect: [:each | Character value: each])
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   213
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   214
    "Modified: / 26-05-2006 / 22:16:45 / janfrog"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   215
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   216
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   217
charactersFor: aStream in: aToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   218
	| characters char endCharacters |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   219
	aStream atEnd ifTrue: [self reportCharacterBlockErrorForToken: aToken].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   220
	char := aStream next.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   221
	characters := char == $\ 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   222
				ifTrue: [(self nodeFor: aStream) characters]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   223
				ifFalse: [OrderedCollection with: char].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   224
	(characters size = 1 and: [aStream peekFor: $-]) ifFalse: [^characters].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   225
	endCharacters := self charactersFor: aStream in: aToken.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   226
	endCharacters size > 1 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   227
		ifTrue: [self reportCharacterBlockErrorForToken: aToken].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   228
	^(characters first asInteger to: endCharacters first asInteger) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   229
		collect: [:each | Character value: each]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   230
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   231
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   232
nodeFor: aStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   233
	| block char value count |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   234
	char := aStream next.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   235
	char == $f 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   236
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   237
			[^SmaCCCharacterRENode characters: (String with: (Character value: 12))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   238
	char == $n 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   239
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   240
			[^SmaCCCharacterRENode characters: (String with: (Character value: 10))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   241
	char == $r 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   242
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   243
			[^SmaCCCharacterRENode characters: (String with: (Character value: 13))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   244
	char == $t ifTrue: [^SmaCCCharacterRENode characters: '	'].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   245
	char == $v 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   246
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   247
			[^SmaCCCharacterRENode characters: (String with: (Character value: 11))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   248
	char == $c 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   249
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   250
			[^SmaCCCharacterRENode characters: (String 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   251
						with: (Character value: aStream next asInteger - $A asInteger))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   252
	char == $x 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   253
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   254
			[count := value := 0.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   255
			
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   256
			[aStream atEnd not and: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   257
					[count < 4 and: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   258
							[char := aStream peek.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   259
							(char between: $0 and: $9) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   260
								or: [(char between: $A and: $F) or: [char between: $a and: $f]]]]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   261
					whileTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   262
						[count := count + 1.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   263
						value := value * 16 + aStream next digitValue].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   264
			^SmaCCCharacterRENode characters: (String with: (Character value: value))].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   265
	char == $d ifTrue: [block := [:each | each between: $0 and: $9]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   266
	char == $D ifTrue: [block := [:each | (each between: $0 and: $9) not]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   267
	char == $s 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   268
		ifTrue: [block := [:each | #[9 10 11 12 13 32] includes: each asInteger]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   269
	char == $S 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   270
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   271
			[block := [:each | (#[9 10 11 12 13 32] includes: each asInteger) not]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   272
	char == $w 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   273
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   274
			[block := 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   275
					[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   276
					(each between: $a and: $z) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   277
							[(each between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   278
								or: [(each between: $0 and: $9) or: [each == $_]]]]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   279
	char == $W 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   280
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   281
			[block := 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   282
					[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   283
					((each between: $a and: $z) or: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   284
							[(each between: $A and: $Z) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   285
								or: [(each between: $0 and: $9) or: [each == $_]]]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   286
						not]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   287
	block isNil 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   288
		ifTrue: [^SmaCCCharacterRENode characters: (String with: char)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   289
	^SmaCCCharacterRENode 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   290
		characters: (String withAll: (self allCharacters select: block))
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   291
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   292
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   293
parseCharacterBlock: aToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   294
        | characters aStream invert |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   295
        aStream := ReadStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   296
                                on: (aToken value copyFrom: 2 to: aToken value size - 1).
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   297
        characters := OrderedCollection new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   298
        invert := aStream peekFor: $^.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   299
        [aStream atEnd] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   300
                whileFalse: [characters addAll: (self charactersFor: aStream in: aToken)].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   301
        ^UnicodeString withAll: (invert 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   302
                                ifTrue: [self allCharacters reject: [:each | characters includes: each]]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   303
                                ifFalse: [characters])
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   304
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   305
    "Modified: / 26-05-2006 / 22:17:06 / janfrog"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   306
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   307
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   308
reportCharacterBlockErrorForToken: aToken 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   309
	currentToken := aToken.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   310
	self reportErrorMessage: 'Invalid character block'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   311
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   312
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   313
!SmaCCScannerParser class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   314
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   315
version
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   316
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__SmaCCScannerParser.st,v 1.2 2006-05-28 20:10:22 vranyj1 Exp $'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   317
! !