'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 21 August 2005 at 3:50:26 am'! !Scanner class methodsFor: 'testing' stamp: 'sumim 8/21/2005 03:49'! isLiteralSymbol: aSymbol "Test whether a symbol can be stored as # followed by its characters. Symbols created internally with asSymbol may not have this property, e.g. '3' asSymbol." | i ascii type | i _ aSymbol size. i = 0 ifTrue: [^ false]. i = 1 ifTrue: [('$''"()#0123456789' includes: (aSymbol at: 1)) ifTrue: [^ false] ifFalse: [^ true]]. ascii _ (aSymbol at: 1) asciiValue. "TypeTable should have been origined at 0 rather than 1 ..." ascii = 0 ifTrue: [^ false]. type _ TypeTable at: ascii ifAbsent:[#xLetter]. (type == #xBinary or: [type == #verticalBar]) ifTrue: [[i > 1] whileTrue: [ascii _ (aSymbol at: i) asciiValue. ascii = 0 ifTrue: [^ false]. type _ TypeTable at: ascii ifAbsent:[#xLetter]. (type == #xBinary or: [type == #verticalBar]) ifFalse: [^ false]. i _ i - 1]. ^ true]. type == #xLetter ifTrue: [[i > 1] whileTrue: [ascii _ (aSymbol at: i) asciiValue. ascii = 0 ifTrue: [^ false]. type _ TypeTable at: ascii ifAbsent:[#xLetter]. (type == #xLetter or: [type == #xDigit or: [type == #xColon]]) ifFalse: [^ false]. i _ i - 1]. ^ true]. ^ false! ! !SqueakScanner methodsFor: 'generated-scanner' stamp: 'sumim 8/21/2005 03:36'! scanForToken self step. (currentCharacter <= $ or: [(currentCharacter between: $ and: $) or: [currentCharacter == $` or: [(currentCharacter >= $) and: [currentCharacter isOctetCharacter]]]]) ifTrue: [^ self recordAndReportMatch: #(32)]. ((currentCharacter between: $A and: $Z) or: [(currentCharacter between: $a and: $z) or: [currentCharacter isOctetCharacter not]]) ifTrue: [self recordMatch: #(21 32). self step. (currentCharacter isDigit or: [(currentCharacter between: $A and: $Z) or: [(currentCharacter between: $a and: $z) or: [currentCharacter isOctetCharacter not]]]) ifTrue: [ [self recordMatch: #(21). self step. currentCharacter isDigit or: [(currentCharacter between: $A and: $Z) or: [(currentCharacter between: $a and: $z) or: [currentCharacter isOctetCharacter not]]]] whileTrue. currentCharacter == $: ifTrue: [^ self scan9]. ^ self reportLastMatch]. currentCharacter == $: ifTrue: [^ self scan9]. ^ self reportLastMatch]. (currentCharacter == $!! or: [(currentCharacter between: $% and: $&) or: [(currentCharacter between: $* and: $,) or: [currentCharacter == $/ or: [currentCharacter == $= or: [(currentCharacter between: $? and: $@) or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]]]) ifTrue: [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter isDigit ifTrue: [self recordMatch: #(18 32). self step. currentCharacter isDigit ifTrue: [ [self recordMatch: #(18). self step. currentCharacter isDigit] whileTrue. currentCharacter == $. ifTrue: [^ self scan7]. currentCharacter == $e ifTrue: [^ self scan1]. currentCharacter == $r ifTrue: [^ self scan8]. ^ self reportLastMatch]. currentCharacter == $. ifTrue: [^ self scan7]. currentCharacter == $e ifTrue: [^ self scan1]. currentCharacter == $r ifTrue: [^ self scan8]. ^ self reportLastMatch]. (currentCharacter isSeparator or: [currentCharacter == $ ]) ifTrue: [self recordMatch: #whitespace. self step. (currentCharacter isSeparator or: [currentCharacter == $ ]) ifTrue: [ [self recordMatch: #whitespace. self step. currentCharacter isSeparator or: [currentCharacter == $ ]] whileTrue. ^ self reportLastMatch]. ^ self reportLastMatch]. 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 recordAndReportMatch: #(3 32)]. currentCharacter == $$ ifTrue: [self recordMatch: #(32). self step. ^ self recordAndReportMatch: #(29)]. currentCharacter == $' ifTrue: [self recordMatch: #(32). self step. currentCharacter ~~ $' ifTrue: [^ self scan3]. currentCharacter == $' ifTrue: [^ self scan4]. ^ self reportLastMatch]. currentCharacter == $( ifTrue: [^ self recordAndReportMatch: #(13 32)]. currentCharacter == $) ifTrue: [^ self recordAndReportMatch: #(16 32)]. currentCharacter == $- ifTrue: [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. currentCharacter isDigit ifTrue: [ [self recordMatch: #(19). self step. currentCharacter isDigit] whileTrue. currentCharacter == $. ifTrue: [self step. currentCharacter isDigit ifTrue: [ [self recordMatch: #(19). self step. currentCharacter isDigit] whileTrue. currentCharacter == $e ifTrue: [^ self scan2]. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $e ifTrue: [^ self scan2]. currentCharacter == $r ifTrue: [self step. (currentCharacter isDigit or: [currentCharacter between: $A and: $Z]) ifTrue: [ [self recordMatch: #(19). self step. currentCharacter isDigit or: [currentCharacter between: $A and: $Z]] whileTrue. currentCharacter == $. ifTrue: [self step. (currentCharacter isDigit or: [currentCharacter between: $A and: $Z]) ifTrue: [ [self recordMatch: #(19). self step. currentCharacter isDigit or: [currentCharacter between: $A and: $Z]] whileTrue. currentCharacter == $e ifTrue: [^ self scan2]. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $e ifTrue: [^ self scan2]. ^ self reportLastMatch]. ^ self reportLastMatch]. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $. ifTrue: [^ self recordAndReportMatch: #(30 32)]. currentCharacter == $: ifTrue: [self recordMatch: #(5 32). self step. ((currentCharacter between: $A and: $Z) or: [currentCharacter between: $a and: $z]) ifTrue: [^ self scan6]. currentCharacter == $= ifTrue: [^ self recordAndReportMatch: #(25)]. ^ self reportLastMatch]. currentCharacter == $; ifTrue: [^ self recordAndReportMatch: #(17 32)]. currentCharacter == $< ifTrue: [self recordMatch: #(6 24 32). self step. currentCharacter isSpecial ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $> ifTrue: [self recordMatch: #(7 24 32). self step. currentCharacter isSpecial ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $[ ifTrue: [^ self recordAndReportMatch: #(1 32)]. currentCharacter == $] ifTrue: [^ self recordAndReportMatch: #(2 32)]. currentCharacter == $^ ifTrue: [^ self recordAndReportMatch: #(4 32)]. currentCharacter == $_ ifTrue: [^ self recordAndReportMatch: #(25 32)]. currentCharacter == ${ ifTrue: [^ self recordAndReportMatch: #(15 32)]. currentCharacter == $| ifTrue: [self recordMatch: #(9 24 32). self step. (currentCharacter == $!! or: [(currentCharacter between: $% and: $&) or: [(currentCharacter between: $* and: $-) or: [currentCharacter == $/ or: [(currentCharacter between: $< and: $@) or: [currentCharacter == $\ or: [currentCharacter == $~]]]]]]) ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. currentCharacter == $| ifTrue: [self recordMatch: #(8 24). self step. currentCharacter isSpecial ifTrue: [ [self recordMatch: #binarySymbol. self step. currentCharacter isSpecial] whileTrue. ^ self reportLastMatch]. ^ self reportLastMatch]. ^ self reportLastMatch]. currentCharacter == $} ifTrue: [^ self recordAndReportMatch: #(14 32)]. ^ self reportLastMatch! !