Add more nodes (can parse stdlib)
This commit is contained in:
@@ -7,13 +7,13 @@ Class {
|
||||
{ #category : #generated }
|
||||
CarpScanner >> emptySymbolTokenId [
|
||||
|
||||
^ 35
|
||||
^ 44
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> errorTokenId [
|
||||
|
||||
^ 36
|
||||
^ 45
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
@@ -21,7 +21,7 @@ CarpScanner >> scan1 [
|
||||
|
||||
[
|
||||
self step.
|
||||
currentCharacter == $" ifTrue: [ ^ self recordAndReportMatch: #( 5 ) ].
|
||||
currentCharacter == $" ifTrue: [ ^ self recordAndReportMatch: #( 9 ) ].
|
||||
currentCharacter == $\ ifTrue: [
|
||||
self step.
|
||||
^ self scan1 ].
|
||||
@@ -31,14 +31,27 @@ CarpScanner >> scan1 [
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan2 [
|
||||
|
||||
self recordMatch: #( 13 ).
|
||||
self step.
|
||||
currentCharacter isDigit ifTrue: [
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan3 ].
|
||||
(currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ]) ifTrue: [
|
||||
[
|
||||
self recordMatch: #( 14 ).
|
||||
self recordMatch: #( 13 ).
|
||||
self step.
|
||||
currentCharacter == $f ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
currentCharacter isDigit ] whileTrue ].
|
||||
currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
currentCharacter isDigit or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ] ] ] whileTrue ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
@@ -46,28 +59,94 @@ CarpScanner >> scan2 [
|
||||
CarpScanner >> scan3 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 14 ).
|
||||
self recordMatch: #( 13 18 ).
|
||||
self step.
|
||||
currentCharacter == $. ifTrue: [ ^ self scan2 ].
|
||||
currentCharacter == $. ifTrue: [ ^ self scan4 ].
|
||||
currentCharacter isDigit ] whileTrue.
|
||||
('bfl' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
self recordMatch: #( 13 18 ).
|
||||
self step.
|
||||
(currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
currentCharacter isDigit or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ] ]) ifTrue: [
|
||||
[
|
||||
self recordMatch: #( 13 ).
|
||||
self step.
|
||||
currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
currentCharacter isDigit or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ] ] ] whileTrue ].
|
||||
^ self reportLastMatch ].
|
||||
(currentCharacter isUppercase or: [
|
||||
currentCharacter isLowercase or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ]) ifTrue: [
|
||||
[
|
||||
self recordMatch: #( 13 ).
|
||||
self step.
|
||||
currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
currentCharacter isDigit or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ] ] ] ] whileTrue ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan4 [
|
||||
|
||||
(self scanForString: 'ac') ifTrue: [ ^ self scan5 ].
|
||||
self step.
|
||||
currentCharacter isDigit ifTrue: [
|
||||
[
|
||||
self recordMatch: #( 18 ).
|
||||
self step.
|
||||
currentCharacter == $f ifTrue: [
|
||||
^ self recordAndReportMatch: #( 18 ) ].
|
||||
currentCharacter isDigit ] whileTrue ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan5 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 18 ).
|
||||
self step.
|
||||
currentCharacter == $. ifTrue: [ ^ self scan4 ].
|
||||
currentCharacter isDigit ] whileTrue.
|
||||
('bfl' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 18 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan6 [
|
||||
|
||||
(self scanForString: 'ac') ifTrue: [ ^ self scan7 ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan7 [
|
||||
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ].
|
||||
^ self recordAndReportMatch: #( 21 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
@@ -76,20 +155,10 @@ CarpScanner >> scanForToken [
|
||||
|
||||
self step.
|
||||
currentCharacter == $" ifTrue: [ ^ self scan1 ].
|
||||
currentCharacter == $# ifTrue: [ ^ self recordAndReportMatch: #( 1 ) ].
|
||||
currentCharacter == $% ifTrue: [ ^ self scanForTokenX7 ].
|
||||
currentCharacter == $& ifTrue: [ ^ self recordAndReportMatch: #( 3 ) ].
|
||||
currentCharacter == $( ifTrue: [ ^ self recordAndReportMatch: #( 6 ) ].
|
||||
currentCharacter == $) ifTrue: [ ^ self recordAndReportMatch: #( 7 ) ].
|
||||
currentCharacter == $, ifTrue: [
|
||||
^ self recordAndReportMatch: #( 15 ) ].
|
||||
currentCharacter == $. ifTrue: [
|
||||
^ self recordAndReportMatch: #( 11 ) ].
|
||||
currentCharacter == $0 ifTrue: [ ^ self scanForTokenX2 ].
|
||||
currentCharacter == $; ifTrue: [ ^ self scanForTokenX5 ].
|
||||
currentCharacter == $@ ifTrue: [ ^ self recordAndReportMatch: #( 4 ) ].
|
||||
currentCharacter == $[ ifTrue: [
|
||||
^ self recordAndReportMatch: #( 12 ) ].
|
||||
^ self scanForTokenX8
|
||||
currentCharacter == $& ifTrue: [ ^ self recordAndReportMatch: #( 4 ) ].
|
||||
^ self scanForTokenX9
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
@@ -97,62 +166,62 @@ CarpScanner >> scanForTokenX1 [
|
||||
|
||||
self step.
|
||||
currentCharacter == $b ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $a ifTrue: [
|
||||
(self scanForString: 'cksp') ifTrue: [ ^ self scan4 ] ].
|
||||
(self scanForString: 'cksp') ifTrue: [ ^ self scan6 ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $f ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $o ifTrue: [
|
||||
(self scanForString: 'rmfeed') ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self recordAndReportMatch: #( 21 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $n ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
(self scanForString: 'wlin') ifTrue: [ ^ self scan5 ] ].
|
||||
(self scanForString: 'wlin') ifTrue: [ ^ self scan7 ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $o ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $7) ifTrue: [
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $7) ifTrue: [
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $7) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ] ].
|
||||
^ self recordAndReportMatch: #( 21 ) ] ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $r ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
(self scanForString: 'turn') ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self recordAndReportMatch: #( 21 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $s ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $p ifTrue: [ ^ self scan4 ].
|
||||
currentCharacter == $p ifTrue: [ ^ self scan6 ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $t ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
currentCharacter == $a ifTrue: [
|
||||
self step.
|
||||
currentCharacter == $b ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self recordAndReportMatch: #( 21 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $u ifTrue: [ ^ self scanForTokenX1X1 ].
|
||||
^ self recordAndReportMatch: #( 17 )
|
||||
^ self recordAndReportMatch: #( 21 )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX1X1 [
|
||||
|
||||
self recordMatch: #( 17 ).
|
||||
self recordMatch: #( 21 ).
|
||||
self step.
|
||||
(currentCharacter isDigit or: [ currentCharacter between: $A and: $F ])
|
||||
ifTrue: [
|
||||
@@ -165,32 +234,32 @@ CarpScanner >> scanForTokenX1X1 [
|
||||
self step.
|
||||
(currentCharacter isDigit or: [
|
||||
currentCharacter between: $A and: $F ]) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ] ] ].
|
||||
^ self recordAndReportMatch: #( 21 ) ] ] ] ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX2 [
|
||||
|
||||
self recordMatch: #( 14 ).
|
||||
self recordMatch: #( 18 ).
|
||||
self step.
|
||||
currentCharacter == $. ifTrue: [ ^ self scan2 ].
|
||||
currentCharacter == $. ifTrue: [ ^ self scan4 ].
|
||||
currentCharacter == $b ifTrue: [
|
||||
self recordMatch: #( 14 ).
|
||||
self recordMatch: #( 18 ).
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $1) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ self recordAndReportMatch: #( 18 ) ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $x ifTrue: [
|
||||
self step.
|
||||
(currentCharacter isDigit or: [
|
||||
(currentCharacter between: $A and: $F) or: [
|
||||
currentCharacter between: $a and: $f ] ]) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ self recordAndReportMatch: #( 18 ) ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan3 ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan5 ].
|
||||
('fl' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ self recordAndReportMatch: #( 18 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
@@ -198,7 +267,7 @@ CarpScanner >> scanForTokenX2 [
|
||||
CarpScanner >> scanForTokenX3 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 10 ).
|
||||
self recordMatch: #( 14 ).
|
||||
self step.
|
||||
currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
@@ -215,7 +284,7 @@ CarpScanner >> scanForTokenX3 [
|
||||
CarpScanner >> scanForTokenX4 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 9 ).
|
||||
self recordMatch: #( 13 ).
|
||||
self step.
|
||||
currentCharacter isLowercase or: [
|
||||
currentCharacter isUppercase or: [
|
||||
@@ -231,7 +300,7 @@ CarpScanner >> scanForTokenX4 [
|
||||
CarpScanner >> scanForTokenX5 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 15 ).
|
||||
self recordMatch: #( 19 ).
|
||||
self step.
|
||||
currentCharacter <= Character tab or: [
|
||||
(currentCharacter between: Character pageUp and: Character newPage)
|
||||
@@ -243,7 +312,7 @@ CarpScanner >> scanForTokenX5 [
|
||||
CarpScanner >> scanForTokenX6 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 16 ).
|
||||
self recordMatch: #( 20 ).
|
||||
self step.
|
||||
currentCharacter isSeparator or: [
|
||||
currentCharacter == Character pageUp ] ] whileTrue.
|
||||
@@ -253,21 +322,20 @@ CarpScanner >> scanForTokenX6 [
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX7 [
|
||||
|
||||
self recordMatch: #( 1 ).
|
||||
self recordMatch: #( 2 ).
|
||||
self step.
|
||||
currentCharacter == $@ ifTrue: [ ^ self recordAndReportMatch: #( 2 ) ].
|
||||
currentCharacter == $@ ifTrue: [ ^ self recordAndReportMatch: #( 3 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX8 [
|
||||
|
||||
currentCharacter == $\ ifTrue: [ ^ self scanForTokenX1 ].
|
||||
currentCharacter == $] ifTrue: [
|
||||
^ self recordAndReportMatch: #( 13 ) ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan3 ].
|
||||
currentCharacter == $} ifTrue: [ ^ self recordAndReportMatch: #( 7 ) ].
|
||||
currentCharacter == $~ ifTrue: [ ^ self recordAndReportMatch: #( 8 ) ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan5 ].
|
||||
('''`' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 8 ) ].
|
||||
^ self recordAndReportMatch: #( 12 ) ].
|
||||
(currentCharacter isSeparator or: [
|
||||
currentCharacter == Character pageUp ]) ifTrue: [
|
||||
^ self scanForTokenX6 ].
|
||||
@@ -275,16 +343,40 @@ CarpScanner >> scanForTokenX8 [
|
||||
(currentCharacter isLowercase or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
('/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ]) ifTrue: [
|
||||
self scanForTokenX4 ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX9 [
|
||||
|
||||
currentCharacter == $( ifTrue: [
|
||||
^ self recordAndReportMatch: #( 10 ) ].
|
||||
currentCharacter == $) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 11 ) ].
|
||||
currentCharacter == $, ifTrue: [
|
||||
^ self recordAndReportMatch: #( 19 ) ].
|
||||
currentCharacter == $- ifTrue: [ ^ self scan2 ].
|
||||
currentCharacter == $. ifTrue: [
|
||||
^ self recordAndReportMatch: #( 15 ) ].
|
||||
currentCharacter == $0 ifTrue: [ ^ self scanForTokenX2 ].
|
||||
currentCharacter == $; ifTrue: [ ^ self scanForTokenX5 ].
|
||||
currentCharacter == $@ ifTrue: [ ^ self recordAndReportMatch: #( 5 ) ].
|
||||
currentCharacter == $[ ifTrue: [
|
||||
^ self recordAndReportMatch: #( 16 ) ].
|
||||
currentCharacter == $\ ifTrue: [ ^ self scanForTokenX1 ].
|
||||
currentCharacter == $] ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ].
|
||||
currentCharacter == ${ ifTrue: [ ^ self recordAndReportMatch: #( 6 ) ].
|
||||
^ self scanForTokenX8
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> tokenActions [
|
||||
|
||||
^ #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment
|
||||
#whitespace )
|
||||
^ #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
|
||||
nil nil #comment #whitespace )
|
||||
]
|
||||
|
Reference in New Issue
Block a user