--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SmaCC__StScanner.st Thu Apr 10 09:11:12 2008 +0000
@@ -0,0 +1,334 @@
+"{ Package: 'stx:goodies/smaCC' }"
+
+"{ NameSpace: SmaCC }"
+
+SmaCCScanner subclass:#StScanner
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'SmaCC-Example Parsers'
+!
+
+
+!StScanner class methodsFor:'accessing'!
+
+frequencyTable
+ ^#(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)
+! !
+
+!StScanner class methodsFor:'generated-comments'!
+
+scannerDefinitionComment
+
+ "<name> : [a-zA-Z_] \w* ;
+<number>: [0-9] ;
+<negative_number> : \- <number> ;
+<string> : \' [^\']* \' (\' [^\']* \')* ;
+<keyword> : <name> \: ;
+<multikeyword> : <name> \: (<name> \: )+ ;
+<binary_symbol> : [\~\-\!!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!!\@\%\&\*\+\=\\\|\?\/\>\<\,]? ;
+<whitespace> : \s+ ;
+<comment> : \"" [^\""]* \"" ;
+<dotted_name> : <name> (\. <name>)+ ;
+<character> : \$ . ;
+<variable_assignment> : <name> \: \= ;
+
+<any_char> : . ; # For VW literal arrays that handle #(;) -> #(#';')"
+! !
+
+!StScanner class methodsFor:'generated-initialization'!
+
+initializeKeywordMap
+ keywordMap := Dictionary new.
+ #(#(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))
+ do:
+ [:each |
+ (keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last].
+ ^keywordMap
+! !
+
+!StScanner methodsFor:'generated-scanner'!
+
+scan1
+
+ [self step.
+ currentCharacter ~~ $'] whileTrue.
+ ^self scan2
+!
+
+scan2
+ self recordMatch: #(23).
+ self step.
+ currentCharacter == $' ifTrue: [^self scan1].
+ ^self reportLastMatch
+!
+
+scan3
+
+ [self step.
+ currentCharacter isHexDigit or:
+ [(currentCharacter between: $G and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]]
+ whileTrue.
+ currentCharacter == $:
+ ifTrue:
+ [self recordMatch: #(25).
+ self step.
+ ((currentCharacter between: $A and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]])
+ ifTrue: [^self scan3].
+ ^self reportLastMatch].
+ ^self reportLastMatch
+!
+
+scan4
+ self step.
+ ((currentCharacter between: $A and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]])
+ ifTrue:
+ [
+ [self recordMatch: #(29).
+ self step.
+ currentCharacter isHexDigit or:
+ [(currentCharacter between: $G and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]]
+ whileTrue.
+ currentCharacter == $. ifTrue: [^self scan4].
+ ^self reportLastMatch].
+ ^self reportLastMatch
+!
+
+scan5
+ self recordMatch: #(24).
+ self step.
+ ((currentCharacter between: $A and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]])
+ ifTrue: [^self scan3].
+ currentCharacter == $= ifTrue: [^self recordAndReportMatch: #variable_assignment].
+ ^self reportLastMatch
+!
+
+scanForToken
+ self step.
+ ((currentCharacter between: $A and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]])
+ ifTrue:
+ [self recordMatch: #(20 32).
+ self step.
+ (currentCharacter isHexDigit or:
+ [(currentCharacter between: $G and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]])
+ ifTrue:
+ [
+ [self recordMatch: #(20).
+ self step.
+ currentCharacter isHexDigit or:
+ [(currentCharacter between: $G and: $Z)
+ or: [currentCharacter == $_ or: [currentCharacter between: $a and: $z]]]]
+ whileTrue.
+ currentCharacter == $: ifTrue: [^self scan5].
+ currentCharacter == $. ifTrue: [^self scan4].
+ ^self reportLastMatch].
+ currentCharacter == $: ifTrue: [^self scan5].
+ currentCharacter == $. ifTrue: [^self scan4].
+ ^self reportLastMatch].
+ ((currentCharacter between: $ and: $
+) or: [currentCharacter == $ ])
+ ifTrue:
+ [self recordMatch: #whitespace.
+ self step.
+ ((currentCharacter between: $ and: $
+) or: [currentCharacter == $ ])
+ ifTrue:
+ [
+ [self recordMatch: #whitespace.
+ self step.
+ (currentCharacter between: $ and: $
+) or: [currentCharacter == $ ]]
+ whileTrue.
+ ^self reportLastMatch].
+ ^self reportLastMatch].
+ (currentCharacter isDigit or:
+ [currentCharacter <= $ or:
+ [(currentCharacter between: $ and: $)
+ or: [currentCharacter == $` or: [currentCharacter >= $]]]])
+ ifTrue: [^self recordAndReportMatch: #(32)].
+ currentCharacter == $:
+ ifTrue:
+ [self recordMatch: #(16 32).
+ self step.
+ currentCharacter == $= ifTrue: [^self recordAndReportMatch: #(11)].
+ ^self reportLastMatch].
+ currentCharacter == $. ifTrue: [^self recordAndReportMatch: #(5 32)].
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [currentCharacter == $= or:
+ [(currentCharacter between: $? and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]]])
+ ifTrue:
+ [self recordMatch: #(26 32).
+ self step.
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [(currentCharacter between: $< and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]])
+ ifTrue: [^self recordAndReportMatch: #(26)].
+ ^self reportLastMatch].
+ currentCharacter == $# ifTrue: [^self recordAndReportMatch: #(4 32)].
+ currentCharacter == $] ifTrue: [^self recordAndReportMatch: #(12 32)].
+ currentCharacter == $[ ifTrue: [^self recordAndReportMatch: #(18 32)].
+ currentCharacter == $( ifTrue: [^self recordAndReportMatch: #(2 32)].
+ currentCharacter == $) ifTrue: [^self recordAndReportMatch: #(1 32)].
+ currentCharacter == $"
+ ifTrue:
+ [self recordMatch: #(32).
+ self step.
+ currentCharacter ~~ $"
+ ifTrue:
+ [
+ [self step.
+ currentCharacter ~~ $"] whileTrue.
+ ^self recordAndReportMatch: #comment].
+ currentCharacter == $" ifTrue: [^self recordAndReportMatch: #comment].
+ ^self reportLastMatch].
+ currentCharacter == $'
+ ifTrue:
+ [self recordMatch: #(32).
+ self step.
+ currentCharacter ~~ $' ifTrue: [^self scan1].
+ currentCharacter == $' ifTrue: [^self scan2].
+ ^self reportLastMatch].
+ currentCharacter == $^ ifTrue: [^self recordAndReportMatch: #(19 32)].
+ currentCharacter == $|
+ ifTrue:
+ [self recordMatch: #(17 26 32).
+ self step.
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [(currentCharacter between: $< and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]])
+ ifTrue: [^self recordAndReportMatch: #(26)].
+ currentCharacter == $| ifTrue: [^self recordAndReportMatch: #(15 26)].
+ ^self reportLastMatch].
+ currentCharacter == $; ifTrue: [^self recordAndReportMatch: #(9 32)].
+ currentCharacter == $-
+ ifTrue:
+ [self recordMatch: #(26 32).
+ self step.
+ currentCharacter isDigit ifTrue: [^self recordAndReportMatch: #negative_number].
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [(currentCharacter between: $< and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]])
+ ifTrue: [^self recordAndReportMatch: #(26)].
+ ^self reportLastMatch].
+ currentCharacter == $>
+ ifTrue:
+ [self recordMatch: #(7 26 32).
+ self step.
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [(currentCharacter between: $< and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]])
+ ifTrue: [^self recordAndReportMatch: #(26)].
+ ^self reportLastMatch].
+ currentCharacter == $<
+ ifTrue:
+ [self recordMatch: #(8 26 32).
+ self step.
+ (currentCharacter == $!! or:
+ [(currentCharacter between: $% and: $&) or:
+ [(currentCharacter between: $* and: $,) or:
+ [currentCharacter == $/ or:
+ [(currentCharacter between: $< and: $@)
+ or: [currentCharacter == $\ or: [currentCharacter == $| or: [currentCharacter == $~]]]]]]])
+ ifTrue: [^self recordAndReportMatch: #(26)].
+ ^self reportLastMatch].
+ currentCharacter == $} ifTrue: [^self recordAndReportMatch: #(3 32)].
+ currentCharacter == ${ ifTrue: [^self recordAndReportMatch: #(6 32)].
+ currentCharacter == $$
+ ifTrue:
+ [self recordMatch: #(32).
+ self step.
+ ^self recordAndReportMatch: #(30)].
+ ^self reportLastMatch
+! !
+
+!StScanner methodsFor:'generated-tokens'!
+
+binary_symbolId
+ ^26
+!
+
+emptySymbolTokenId
+ ^63
+!
+
+errorTokenId
+ ^64
+!
+
+nameId
+ ^20
+!
+
+negative_numberId
+ ^22
+!
+
+numberId
+ ^21
+! !
+
+!StScanner methodsFor:'public'!
+
+negative_number
+ stream skip: -2.
+ self scanNumber: self negative_numberId
+!
+
+number
+ stream skip: -1.
+ self scanNumber: self numberId
+!
+
+scanNumber: id
+ | token number |
+ number := Number readFrom: stream.
+ outputStream reset.
+ token := SmaCCToken
+ value: number
+ start: start
+ id: (Array with: id).
+ matchActions := nil.
+ returnMatchBlock value: token
+!
+
+variable_assignment
+ | token |
+ outputStream skip: -2.
+ stream skip: -2.
+ token := SmaCCToken
+ value: outputStream contents
+ start: start
+ id: (Array with: self nameId).
+ outputStream reset.
+ matchActions := nil.
+ returnMatchBlock value: token
+! !
+
+!StScanner class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__StScanner.st,v 1.1 2006-02-09 21:17:31 vranyj1 Exp $'
+! !