Add parsing
This commit is contained in:
40
src/Carp/CarpArrayNode.class.st
Normal file
40
src/Carp/CarpArrayNode.class.st
Normal file
@@ -0,0 +1,40 @@
|
||||
Class {
|
||||
#name : #CarpArrayNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'expressions'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpArrayNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitArray: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpArrayNode >> compositeNodeVariables [
|
||||
|
||||
^ #( #expressions )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpArrayNode >> expressions [
|
||||
|
||||
^ expressions
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpArrayNode >> expressions: anOrderedCollection [
|
||||
|
||||
self setParents: self expressions to: nil.
|
||||
expressions := anOrderedCollection.
|
||||
self setParents: self expressions to: self
|
||||
]
|
||||
|
||||
{ #category : #'generated-initialize-release' }
|
||||
CarpArrayNode >> initialize [
|
||||
super initialize.
|
||||
expressions := OrderedCollection new: 2.
|
||||
]
|
32
src/Carp/CarpCharacterNode.class.st
Normal file
32
src/Carp/CarpCharacterNode.class.st
Normal file
@@ -0,0 +1,32 @@
|
||||
Class {
|
||||
#name : #CarpCharacterNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpCharacterNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitCharacter: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpCharacterNode >> tokenVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpCharacterNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpCharacterNode >> value: aSmaCCToken [
|
||||
|
||||
value := aSmaCCToken
|
||||
]
|
34
src/Carp/CarpDerefNode.class.st
Normal file
34
src/Carp/CarpDerefNode.class.st
Normal file
@@ -0,0 +1,34 @@
|
||||
Class {
|
||||
#name : #CarpDerefNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpDerefNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitDeref: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpDerefNode >> nodeVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpDerefNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpDerefNode >> value: aCarpExpressionNode [
|
||||
|
||||
self value notNil ifTrue: [ self value parent: nil ].
|
||||
value := aCarpExpressionNode.
|
||||
self value notNil ifTrue: [ self value parent: self ]
|
||||
]
|
11
src/Carp/CarpExpressionNode.class.st
Normal file
11
src/Carp/CarpExpressionNode.class.st
Normal file
@@ -0,0 +1,11 @@
|
||||
Class {
|
||||
#name : #CarpExpressionNode,
|
||||
#superclass : #SmaCCParseNode,
|
||||
#category : #'Carp-Carp'
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpExpressionNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitExpression: self
|
||||
]
|
7
src/Carp/CarpExpressionNodeVisitor.class.st
Normal file
7
src/Carp/CarpExpressionNodeVisitor.class.st
Normal file
@@ -0,0 +1,7 @@
|
||||
Class {
|
||||
#name : #CarpExpressionNodeVisitor,
|
||||
#superclass : #Object,
|
||||
#traits : 'TCarpExpressionNodeVisitor',
|
||||
#classTraits : 'TCarpExpressionNodeVisitor classTrait',
|
||||
#category : #Carp
|
||||
}
|
36
src/Carp/CarpFile.class.st
Normal file
36
src/Carp/CarpFile.class.st
Normal file
@@ -0,0 +1,36 @@
|
||||
Class {
|
||||
#name : #CarpFile,
|
||||
#superclass : #Object,
|
||||
#instVars : [
|
||||
'fileName',
|
||||
'contents'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
CarpFile class >> for: aFileName [
|
||||
^ self new for: aFileName
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
CarpFile >> contents [
|
||||
|
||||
^ contents
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
CarpFile >> contents: aString [
|
||||
contents := aString
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
CarpFile >> fileName: aFileName [
|
||||
fileName := aFileName
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
CarpFile >> for: aFileName [
|
||||
self fileName: aFileName.
|
||||
self contents: (CarpParser parse: aFileName asFileReference contents).
|
||||
]
|
40
src/Carp/CarpListNode.class.st
Normal file
40
src/Carp/CarpListNode.class.st
Normal file
@@ -0,0 +1,40 @@
|
||||
Class {
|
||||
#name : #CarpListNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'expressions'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpListNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitList: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpListNode >> compositeNodeVariables [
|
||||
|
||||
^ #( #expressions )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpListNode >> expressions [
|
||||
|
||||
^ expressions
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpListNode >> expressions: anOrderedCollection [
|
||||
|
||||
self setParents: self expressions to: nil.
|
||||
expressions := anOrderedCollection.
|
||||
self setParents: self expressions to: self
|
||||
]
|
||||
|
||||
{ #category : #'generated-initialize-release' }
|
||||
CarpListNode >> initialize [
|
||||
super initialize.
|
||||
expressions := OrderedCollection new: 2.
|
||||
]
|
34
src/Carp/CarpModuleOrTypeNode.class.st
Normal file
34
src/Carp/CarpModuleOrTypeNode.class.st
Normal file
@@ -0,0 +1,34 @@
|
||||
Class {
|
||||
#name : #CarpModuleOrTypeNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpModuleOrTypeNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitModuleOrType: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpModuleOrTypeNode >> otherVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpModuleOrTypeNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpModuleOrTypeNode >> value: anObject [
|
||||
|
||||
self setParent: self value to: nil.
|
||||
value := anObject.
|
||||
self setParent: self value to: self
|
||||
]
|
32
src/Carp/CarpNumberNode.class.st
Normal file
32
src/Carp/CarpNumberNode.class.st
Normal file
@@ -0,0 +1,32 @@
|
||||
Class {
|
||||
#name : #CarpNumberNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpNumberNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitNumber: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpNumberNode >> tokenVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpNumberNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpNumberNode >> value: aSmaCCToken [
|
||||
|
||||
value := aSmaCCToken
|
||||
]
|
@@ -6,18 +6,18 @@ Class {
|
||||
|
||||
{ #category : #'generated-accessing' }
|
||||
CarpParser class >> cacheId [
|
||||
^'2020-10-05T22:57:25.346883+02:00'
|
||||
^'2022-03-20T19:54:13.067877+01:00'
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> definitionComment [
|
||||
"%glr;
|
||||
|
||||
<hexa>
|
||||
: [0-9a-fA-F]
|
||||
;
|
||||
%root Expression;
|
||||
%prefix Carp;
|
||||
%suffix Node;
|
||||
<escape>
|
||||
: \\ ([^\r\n] | (u <hexa>{4,4}))+
|
||||
: \\ (. | u[0-9A-F]{4,4} | o[0-7]{3,3} | newline | return | space | tab | space | backspace | formfeed) # other character types
|
||||
;
|
||||
<string_literal>
|
||||
: (\"" ([^\""\\] | <escape>)* \"")
|
||||
@@ -29,29 +29,23 @@ CarpParser class >> definitionComment [
|
||||
: \)
|
||||
;
|
||||
<quote>
|
||||
: \'
|
||||
: \' | \`
|
||||
;
|
||||
<variable_start>
|
||||
: <isLowercase> | _ | \$ | \+ | \* | \/ | \? | ! | > | < | = | :
|
||||
: <isLowercase> | _ | \$ | \+ | \* | \/ | \? | ! | > | < | = | : | -
|
||||
;
|
||||
default <variable>
|
||||
: <variable_start> <variable_part>*
|
||||
;
|
||||
<variable_part>
|
||||
: <variable_start> | <isDigit>
|
||||
: <variable_start> | <isDigit> | <isUppercase>
|
||||
;
|
||||
<module>
|
||||
: <isUppercase> <variable_part>*
|
||||
;
|
||||
<space>
|
||||
: (<isSpaceSeparator> | ,)+
|
||||
;
|
||||
<dot>
|
||||
: \.
|
||||
;
|
||||
<Symbol>
|
||||
: a
|
||||
;
|
||||
<open_bracket>
|
||||
: \[
|
||||
;
|
||||
@@ -73,71 +67,103 @@ default <variable>
|
||||
;
|
||||
<numeric_literal>
|
||||
: <decimal> | <hex_integer> | <binary_integer>
|
||||
;
|
||||
<comment>
|
||||
: \; [^\r\n]*
|
||||
| \, # commas are treated as whitespace, but whitespace is not saved, so I made them comments instead
|
||||
;
|
||||
<whitespace>
|
||||
: \s+
|
||||
;
|
||||
<character>
|
||||
: \\ (. | u[0-9A-F]{4,4} | o[0-7]{3,3} | newline | return | space | tab | space | backspace | formfeed) # other character types
|
||||
;Start
|
||||
: Expression+
|
||||
: Expressions {{}}
|
||||
;
|
||||
Expressions
|
||||
:
|
||||
| Expressions Expression 'expression'
|
||||
;
|
||||
Expression
|
||||
: Literal
|
||||
| Deref
|
||||
| Ref
|
||||
| Unquote
|
||||
;
|
||||
Unquote
|
||||
: (""%"" | ""%@"") Expression 'value' {{}}
|
||||
;
|
||||
Ref
|
||||
: ""&"" Expression 'value' {{}}
|
||||
;
|
||||
Deref
|
||||
: ""@"" Expression 'value' {{}}
|
||||
;
|
||||
Literal
|
||||
: String | List | Array | Symbol | Quote | Number
|
||||
: String | List | Array | Symbol | Quote | Number | Character
|
||||
;
|
||||
Character
|
||||
: <character> 'value' {{}}
|
||||
;
|
||||
Number
|
||||
: <numeric_literal>
|
||||
: <numeric_literal> 'value' {{}}
|
||||
;
|
||||
Array
|
||||
: <open_bracket> ListContents <close_bracket>
|
||||
: <open_bracket> Expressions <close_bracket> {{}}
|
||||
;
|
||||
Quote
|
||||
: <quote> Expression
|
||||
: <quote> Expression 'value' {{}}
|
||||
;
|
||||
Symbol
|
||||
: ModuleOrType | Variable
|
||||
;
|
||||
Variable
|
||||
: <variable>
|
||||
: <variable> 'value' {{}}
|
||||
;
|
||||
ModuleOrType
|
||||
: <module> <dot> Symbol
|
||||
| <module>
|
||||
: <module> <dot> Symbol 'value' {{}}
|
||||
| <module> 'value' {{}}
|
||||
;
|
||||
List
|
||||
: <open_paren> ListContents <close_paren>
|
||||
;
|
||||
ListContents
|
||||
: Expression <space> ListContents
|
||||
| Expression
|
||||
: <open_paren> Expressions <close_paren> {{}}
|
||||
;
|
||||
String
|
||||
: <string_literal>
|
||||
: <string_literal> 'value' {{}}
|
||||
;"
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> reduceTable [
|
||||
^#(
|
||||
#(25 1 #reduceFor: 1310721 false )
|
||||
#(21 1 #reduceFor: 1111041 false )
|
||||
#(22 1 #reduceFor: 1137666 false )
|
||||
#(17 1 #reduceFor: 952321 false )
|
||||
#(13 1 #reduceFor: 837633 false )
|
||||
#(14 1 #reduceFor: 847873 false )
|
||||
#(15 1 #reduceFor: 863233 false )
|
||||
#(16 1 #reduceFor: 888838 false )
|
||||
#(16 1 #reduceFor: 888835 false )
|
||||
#(16 1 #reduceFor: 888837 false )
|
||||
#(16 1 #reduceFor: 888836 false )
|
||||
#(20 1 #reduceFor: 1073154 false )
|
||||
#(20 1 #reduceFor: 1073153 false )
|
||||
#(16 1 #reduceFor: 888834 false )
|
||||
#(16 1 #reduceFor: 888833 false )
|
||||
#(24 1 #reduceFor: 1244162 false )
|
||||
#(19 2 #reduceFor: 1041409 false )
|
||||
#(14 2 #reduceFor: 847874 false )
|
||||
#(23 3 #reduceFor: 1191937 false )
|
||||
#(22 3 #reduceFor: 1137665 false )
|
||||
#(18 3 #reduceFor: 984065 false )
|
||||
#(24 3 #reduceFor: 1244161 false )
|
||||
#(20 0 #reduceActionForExpressions1: 1258497 false)
|
||||
#(19 1 #reduceActionForStart1: 1227777 false)
|
||||
#(34 1 #reduceActionForString1: 1988609 false)
|
||||
#(31 1 #reduceActionForVariable1: 1811457 false)
|
||||
#(32 1 #reduceActionForModuleOrType2: 1851394 false)
|
||||
#(27 1 #reduceActionForNumber1: 1620993 false)
|
||||
#(26 1 #reduceActionForCharacter1: 1579009 false)
|
||||
#(20 2 #reduceActionForExpressions2: 1258498 false)
|
||||
#(21 1 #liftFirstValue: 1316868 false)
|
||||
#(21 1 #liftFirstValue: 1316867 false)
|
||||
#(21 1 #liftFirstValue: 1316866 false)
|
||||
#(21 1 #liftFirstValue: 1316865 false)
|
||||
#(25 1 #liftFirstValue: 1502215 false)
|
||||
#(25 1 #liftFirstValue: 1502214 false)
|
||||
#(25 1 #liftFirstValue: 1502211 false)
|
||||
#(25 1 #liftFirstValue: 1502213 false)
|
||||
#(25 1 #liftFirstValue: 1502212 false)
|
||||
#(30 1 #liftFirstValue: 1773570 false)
|
||||
#(30 1 #liftFirstValue: 1773569 false)
|
||||
#(25 1 #liftFirstValue: 1502210 false)
|
||||
#(25 1 #liftFirstValue: 1502209 false)
|
||||
#(22 2 #reduceActionForUnquote1: 1370113 false)
|
||||
#(22 2 #reduceActionForUnquote1: 1370114 false)
|
||||
#(23 2 #reduceActionForRef1: 1422337 false)
|
||||
#(24 2 #reduceActionForDeref1: 1461249 false)
|
||||
#(29 2 #reduceActionForQuote1: 1728513 false)
|
||||
#(33 3 #reduceActionForList1: 1932289 false)
|
||||
#(32 3 #reduceActionForModuleOrType1: 1851393 false)
|
||||
#(28 3 #reduceActionForArray1: 1667073 false)
|
||||
).
|
||||
]
|
||||
|
||||
@@ -148,47 +174,212 @@ CarpParser class >> scannerClass [
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> startingStateForStart [
|
||||
|
||||
^ 1
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> symbolNames [
|
||||
^ #('<string_literal>' '<open_paren>' '<close_paren>' '<quote>' '<variable>' '<module>' '<space>' '<dot>' '<open_bracket>' '<close_bracket>' '<numeric_literal>' 'B e g i n' 'Start' 'Expression+' 'Expression' 'Literal' 'Number' 'Array' 'Quote' 'Symbol' 'Variable' 'ModuleOrType' 'List' 'ListContents' 'String' 'E O F' 'error')
|
||||
|
||||
^ #( '"%"' '"%@"' '"&"' '"@"' '<string_literal>' '<open_paren>'
|
||||
'<close_paren>' '<quote>' '<variable>' '<module>' '<dot>'
|
||||
'<open_bracket>' '<close_bracket>' '<numeric_literal>'
|
||||
'<comment>' '<whitespace>' '<character>' 'B e g i n' 'Start'
|
||||
'Expressions' 'Expression' 'Unquote' 'Ref' 'Deref' 'Literal'
|
||||
'Character' 'Number' 'Array' 'Quote' 'Symbol' 'Variable'
|
||||
'ModuleOrType' 'List' 'String' 'E O F' 'error' )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> symbolTypes [
|
||||
|
||||
^ #( #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken
|
||||
#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken
|
||||
#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken
|
||||
#SmaCCToken #SmaCCToken #CarpStartNode #CarpStartNode
|
||||
#OrderedCollection #CarpExpressionNode #CarpUnquoteNode
|
||||
#CarpRefNode #CarpDerefNode #CarpExpressionNode
|
||||
#CarpCharacterNode #CarpNumberNode #CarpArrayNode #CarpQuoteNode
|
||||
#CarpExpressionNode #CarpVariableNode #CarpModuleOrTypeNode
|
||||
#CarpListNode #CarpStringNode #SmaCCToken #SmaCCErrorNode )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpParser class >> transitionTable [
|
||||
^#(
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 37 0 13 0 41 0 14 0 45 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 81 0 25]
|
||||
#[0 0 6 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 85 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 89 0 24 0 81 0 25]
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 93 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 81 0 25]
|
||||
#[0 0 10 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[1 0 14 0 1 0 14 0 2 0 14 0 3 0 14 0 4 0 14 0 5 0 14 0 6 0 14 0 7 0 97 0 8 0 14 0 9 0 14 0 10 0 14 0 11 0 14 0 26]
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 85 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 101 0 24 0 81 0 25]
|
||||
#[0 0 18 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 0 0 26]
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 105 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 81 0 25 0 22 0 26]
|
||||
#[0 0 26 0 1 0 2 0 4 0 5 0 6 0 9 0 11 0 26]
|
||||
#[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 42 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 46 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 54 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 58 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 62 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[1 0 66 0 3 0 109 0 7 0 66 0 10]
|
||||
#[0 0 113 0 3]
|
||||
#[0 0 70 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[1 0 21 0 5 0 25 0 6 0 117 0 20 0 69 0 21 0 73 0 22]
|
||||
#[0 0 121 0 10]
|
||||
#[0 0 74 0 1 0 2 0 4 0 5 0 6 0 9 0 11 0 26]
|
||||
#[1 0 9 0 1 0 13 0 2 0 17 0 4 0 21 0 5 0 25 0 6 0 29 0 9 0 33 0 11 0 85 0 15 0 49 0 16 0 53 0 17 0 57 0 18 0 61 0 19 0 65 0 20 0 69 0 21 0 73 0 22 0 77 0 23 0 125 0 24 0 81 0 25]
|
||||
#[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 26]
|
||||
#[0 0 90 0 3 0 10]
|
||||
#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 6 0 6 0 8 0 6 0 9 0 6 0 10 0 6 0 12 0 6 0 14 0 6 0 17 0 9 0 19 0 13 0 20 0 6 0 35]
|
||||
#[0 0 0 0 35]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 65 0 21 0 65 0 22 0 65 0 23 0 65 0 24 0 65 0 25 0 65 0 26 0 65 0 27 0 65 0 28 0 65 0 29 0 65 0 30 0 65 0 31 0 65 0 32 0 65 0 33 0 65 0 34 0 10 0 35]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 121 0 21 0 121 0 22 0 121 0 23 0 121 0 24 0 121 0 25 0 121 0 26 0 121 0 27 0 121 0 28 0 121 0 29 0 121 0 30 0 121 0 31 0 121 0 32 0 121 0 33 0 121 0 34]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 125 0 21 0 125 0 22 0 125 0 23 0 125 0 24 0 125 0 25 0 125 0 26 0 125 0 27 0 125 0 28 0 125 0 29 0 125 0 30 0 125 0 31 0 125 0 32 0 125 0 33 0 125 0 34]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 129 0 21 0 129 0 22 0 129 0 23 0 129 0 24 0 129 0 25 0 129 0 26 0 129 0 27 0 129 0 28 0 129 0 29 0 129 0 30 0 129 0 31 0 129 0 32 0 129 0 33 0 129 0 34]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 133 0 21 0 133 0 22 0 133 0 23 0 133 0 24 0 133 0 25 0 133 0 26 0 133 0 27 0 133 0 28 0 133 0 29 0 133 0 30 0 133 0 31 0 133 0 32 0 133 0 33 0 133 0 34]
|
||||
#[0 0 14 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 6 0 6 0 7 0 6 0 8 0 6 0 9 0 6 0 10 0 6 0 12 0 6 0 14 0 6 0 17 0 137 0 20]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 141 0 21 0 141 0 22 0 141 0 23 0 141 0 24 0 141 0 25 0 141 0 26 0 141 0 27 0 141 0 28 0 141 0 29 0 141 0 30 0 141 0 31 0 141 0 32 0 141 0 33 0 141 0 34]
|
||||
#[0 0 18 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[1 0 22 0 1 0 22 0 2 0 22 0 3 0 22 0 4 0 22 0 5 0 22 0 6 0 22 0 7 0 22 0 8 0 22 0 9 0 22 0 10 0 145 0 11 0 22 0 12 0 22 0 13 0 22 0 14 0 22 0 17 0 22 0 35]
|
||||
#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 6 0 6 0 8 0 6 0 9 0 6 0 10 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 17 0 149 0 20]
|
||||
#[0 0 26 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 42 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 46 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 54 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 58 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 62 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 66 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 70 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 94 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 98 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 153 0 7 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 57 0 14 0 61 0 17 0 65 0 21 0 65 0 22 0 65 0 23 0 65 0 24 0 65 0 25 0 65 0 26 0 65 0 27 0 65 0 28 0 65 0 29 0 65 0 30 0 65 0 31 0 65 0 32 0 65 0 33 0 65 0 34]
|
||||
#[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[1 0 45 0 9 0 49 0 10 0 157 0 30 0 157 0 31 0 157 0 32]
|
||||
#[1 0 17 0 1 0 21 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 8 0 45 0 9 0 49 0 10 0 53 0 12 0 161 0 13 0 57 0 14 0 61 0 17 0 65 0 21 0 65 0 22 0 65 0 23 0 65 0 24 0 65 0 25 0 65 0 26 0 65 0 27 0 65 0 28 0 65 0 29 0 65 0 30 0 65 0 31 0 65 0 32 0 65 0 33 0 65 0 34]
|
||||
#[0 0 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 114 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
#[0 0 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 12 0 13 0 14 0 17 0 35]
|
||||
).
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForArray1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpArrayNode new.
|
||||
result addNodes: (nodes at: 2) to: result expressions.
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForCharacter1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpCharacterNode new.
|
||||
result value: (nodes at: 1).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForDeref1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpDerefNode new.
|
||||
result value: (nodes at: 2).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForExpressions1: nodes [
|
||||
|
||||
| result |
|
||||
result := OrderedCollection new: 2.
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForExpressions2: nodes [
|
||||
|
||||
| result |
|
||||
result := nodes at: 1.
|
||||
self add: (nodes at: 2) to: result.
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForList1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpListNode new.
|
||||
result addNodes: (nodes at: 2) to: result expressions.
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForModuleOrType1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpModuleOrTypeNode new.
|
||||
result value: (nodes at: 3).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForModuleOrType2: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpModuleOrTypeNode new.
|
||||
result value: (nodes at: 1).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForNumber1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpNumberNode new.
|
||||
result value: (nodes at: 1).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForQuote1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpQuoteNode new.
|
||||
result value: (nodes at: 2).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForRef1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpRefNode new.
|
||||
result value: (nodes at: 2).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForStart1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpStartNode new.
|
||||
result addNodes: (nodes at: 1) to: result expressions.
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForString1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpStringNode new.
|
||||
result value: (nodes at: 1).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForUnquote1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpUnquoteNode new.
|
||||
result value: (nodes at: 2).
|
||||
^ result
|
||||
]
|
||||
|
||||
{ #category : #'generated-reduction actions' }
|
||||
CarpParser >> reduceActionForVariable1: nodes [
|
||||
|
||||
| result |
|
||||
result := CarpVariableNode new.
|
||||
result value: (nodes at: 1).
|
||||
^ result
|
||||
]
|
||||
|
34
src/Carp/CarpQuoteNode.class.st
Normal file
34
src/Carp/CarpQuoteNode.class.st
Normal file
@@ -0,0 +1,34 @@
|
||||
Class {
|
||||
#name : #CarpQuoteNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpQuoteNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitQuote: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpQuoteNode >> nodeVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpQuoteNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpQuoteNode >> value: aCarpExpressionNode [
|
||||
|
||||
self value notNil ifTrue: [ self value parent: nil ].
|
||||
value := aCarpExpressionNode.
|
||||
self value notNil ifTrue: [ self value parent: self ]
|
||||
]
|
34
src/Carp/CarpRefNode.class.st
Normal file
34
src/Carp/CarpRefNode.class.st
Normal file
@@ -0,0 +1,34 @@
|
||||
Class {
|
||||
#name : #CarpRefNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpRefNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitRef: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpRefNode >> nodeVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpRefNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpRefNode >> value: aCarpExpressionNode [
|
||||
|
||||
self value notNil ifTrue: [ self value parent: nil ].
|
||||
value := aCarpExpressionNode.
|
||||
self value notNil ifTrue: [ self value parent: self ]
|
||||
]
|
@@ -6,172 +6,285 @@ Class {
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> emptySymbolTokenId [
|
||||
^ 26
|
||||
|
||||
^ 35
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> errorTokenId [
|
||||
^ 27
|
||||
|
||||
^ 36
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan1 [
|
||||
[ self step.
|
||||
currentCharacter == $"
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(1) ].
|
||||
currentCharacter == $\
|
||||
ifTrue: [ self step.
|
||||
(currentCharacter <= Character tab
|
||||
or: [ (currentCharacter between: Character pageUp and: Character newPage)
|
||||
or: [ currentCharacter >= (Character value: 14) ] ])
|
||||
ifTrue: [ ^ self scan2 ].
|
||||
^ self reportLastMatch ].
|
||||
|
||||
[
|
||||
self step.
|
||||
currentCharacter == $" ifTrue: [ ^ self recordAndReportMatch: #( 5 ) ].
|
||||
currentCharacter == $\ ifTrue: [
|
||||
self step.
|
||||
^ self scan1 ].
|
||||
true ] whileTrue
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan2 [
|
||||
[ self step.
|
||||
currentCharacter == $"
|
||||
ifTrue: [ [ self recordMatch: #(1).
|
||||
self step.
|
||||
currentCharacter == $" ] whileTrue.
|
||||
(currentCharacter == Character lf
|
||||
or: [ currentCharacter == Character cr ])
|
||||
ifTrue: [ ^ self scan1 ].
|
||||
^ self scan2 ].
|
||||
(currentCharacter == Character lf
|
||||
or: [ currentCharacter == Character cr ])
|
||||
ifTrue: [ ^ self scan1 ].
|
||||
true ] whileTrue
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan3 [
|
||||
self step.
|
||||
currentCharacter isDigit
|
||||
ifTrue: [ [ self recordMatch: #(11).
|
||||
currentCharacter isDigit ifTrue: [
|
||||
[
|
||||
self recordMatch: #( 14 ).
|
||||
self step.
|
||||
currentCharacter == $f
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(11) ].
|
||||
currentCharacter == $f ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
currentCharacter isDigit ] whileTrue ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan4 [
|
||||
[ self recordMatch: #(11).
|
||||
CarpScanner >> scan3 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 14 ).
|
||||
self step.
|
||||
currentCharacter == $.
|
||||
ifTrue: [ ^ self scan3 ].
|
||||
currentCharacter == $. ifTrue: [ ^ self scan2 ].
|
||||
currentCharacter isDigit ] whileTrue.
|
||||
('bfl' includes: currentCharacter)
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(11) ].
|
||||
('bfl' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan4 [
|
||||
|
||||
(self scanForString: 'ac') ifTrue: [ ^ self scan5 ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scan5 [
|
||||
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForToken [
|
||||
|
||||
self step.
|
||||
currentCharacter == $"
|
||||
ifTrue: [ ^ self scan1 ].
|
||||
currentCharacter == $'
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(4) ].
|
||||
currentCharacter == $(
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(2) ].
|
||||
currentCharacter == $)
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(3) ].
|
||||
currentCharacter == $.
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(8) ].
|
||||
^ self scanForTokenX5
|
||||
currentCharacter == $" ifTrue: [ ^ self scan1 ].
|
||||
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
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX1 [
|
||||
self recordMatch: #(11).
|
||||
|
||||
self step.
|
||||
currentCharacter == $.
|
||||
ifTrue: [ ^ self scan3 ].
|
||||
currentCharacter == $b
|
||||
ifTrue: [ self recordMatch: #(11).
|
||||
currentCharacter == $b ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $1)
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(11) ].
|
||||
currentCharacter == $a ifTrue: [
|
||||
(self scanForString: 'cksp') ifTrue: [ ^ self scan4 ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $x
|
||||
ifTrue: [ self step.
|
||||
(currentCharacter isDigit
|
||||
or: [ (currentCharacter between: $A and: $F)
|
||||
or: [ currentCharacter between: $a and: $f ] ])
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(11) ].
|
||||
currentCharacter == $f ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
currentCharacter == $o ifTrue: [
|
||||
(self scanForString: 'rmfeed') ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter isDigit
|
||||
ifTrue: [ ^ self scan4 ].
|
||||
('fl' includes: currentCharacter)
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(11) ].
|
||||
currentCharacter == $n ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
(self scanForString: 'wlin') ifTrue: [ ^ self scan5 ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $o ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
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 reportLastMatch ].
|
||||
currentCharacter == $r ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
currentCharacter == $e ifTrue: [
|
||||
(self scanForString: 'turn') ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $s ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
currentCharacter == $p ifTrue: [ ^ self scan4 ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $t ifTrue: [
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
currentCharacter == $a ifTrue: [
|
||||
self step.
|
||||
currentCharacter == $b ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ].
|
||||
^ self reportLastMatch ].
|
||||
currentCharacter == $u ifTrue: [ ^ self scanForTokenX1X1 ].
|
||||
^ self recordAndReportMatch: #( 17 )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX1X1 [
|
||||
|
||||
self recordMatch: #( 17 ).
|
||||
self step.
|
||||
(currentCharacter isDigit or: [ currentCharacter between: $A and: $F ])
|
||||
ifTrue: [
|
||||
self step.
|
||||
(currentCharacter isDigit or: [
|
||||
currentCharacter between: $A and: $F ]) ifTrue: [
|
||||
self step.
|
||||
(currentCharacter isDigit or: [
|
||||
currentCharacter between: $A and: $F ]) ifTrue: [
|
||||
self step.
|
||||
(currentCharacter isDigit or: [
|
||||
currentCharacter between: $A and: $F ]) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 17 ) ] ] ] ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX2 [
|
||||
[ self recordMatch: #(6).
|
||||
|
||||
self recordMatch: #( 14 ).
|
||||
self step.
|
||||
currentCharacter isLowercase
|
||||
or: [ currentCharacter isDigit
|
||||
or: [ ('!$' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $* and: $+)
|
||||
or: [ ('/:' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $< and: $?)
|
||||
or: [ currentCharacter == $_ ] ] ] ] ] ] ] whileTrue.
|
||||
currentCharacter == $. ifTrue: [ ^ self scan2 ].
|
||||
currentCharacter == $b ifTrue: [
|
||||
self recordMatch: #( 14 ).
|
||||
self step.
|
||||
(currentCharacter between: $0 and: $1) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ 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 reportLastMatch ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan3 ].
|
||||
('fl' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 14 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX3 [
|
||||
[ self recordMatch: #(5).
|
||||
|
||||
[
|
||||
self recordMatch: #( 10 ).
|
||||
self step.
|
||||
currentCharacter isLowercase
|
||||
or: [ currentCharacter isDigit
|
||||
or: [ ('!$' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $* and: $+)
|
||||
or: [ ('/:' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $< and: $?)
|
||||
or: [ currentCharacter == $_ ] ] ] ] ] ] ] 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
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX4 [
|
||||
[ self recordMatch: #(7).
|
||||
|
||||
[
|
||||
self recordMatch: #( 9 ).
|
||||
self step.
|
||||
currentCharacter isSpaceSeparator or: [ currentCharacter == $, ] ]
|
||||
whileTrue.
|
||||
^ self reportLastMatch
|
||||
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
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX5 [
|
||||
currentCharacter == $0
|
||||
ifTrue:
|
||||
[ ^ self scanForTokenX1 ].
|
||||
currentCharacter == $[
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(9) ].
|
||||
currentCharacter == $]
|
||||
ifTrue: [ ^ self recordAndReportMatch: #(10) ].
|
||||
currentCharacter isDigit
|
||||
ifTrue: [ ^ self scan4 ].
|
||||
(currentCharacter isSpaceSeparator or: [ currentCharacter == $, ])
|
||||
ifTrue:
|
||||
[ ^ self scanForTokenX4 ].
|
||||
currentCharacter isUppercase
|
||||
ifTrue:
|
||||
[ ^ self scanForTokenX2 ].
|
||||
(currentCharacter isLowercase
|
||||
or: [ ('!$' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $* and: $+)
|
||||
or: [ ('/:' includes: currentCharacter)
|
||||
or: [ (currentCharacter between: $< and: $?)
|
||||
or: [ currentCharacter == $_ ] ] ] ] ])
|
||||
ifTrue:
|
||||
[ self scanForTokenX3 ].
|
||||
|
||||
[
|
||||
self recordMatch: #( 15 ).
|
||||
self step.
|
||||
currentCharacter <= Character tab or: [
|
||||
(currentCharacter between: Character pageUp and: Character newPage)
|
||||
or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue.
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX6 [
|
||||
|
||||
[
|
||||
self recordMatch: #( 16 ).
|
||||
self step.
|
||||
currentCharacter isSeparator or: [
|
||||
currentCharacter == Character pageUp ] ] whileTrue.
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX7 [
|
||||
|
||||
self recordMatch: #( 1 ).
|
||||
self step.
|
||||
currentCharacter == $@ ifTrue: [ ^ self recordAndReportMatch: #( 2 ) ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> scanForTokenX8 [
|
||||
|
||||
currentCharacter == $\ ifTrue: [ ^ self scanForTokenX1 ].
|
||||
currentCharacter == $] ifTrue: [
|
||||
^ self recordAndReportMatch: #( 13 ) ].
|
||||
currentCharacter isDigit ifTrue: [ ^ self scan3 ].
|
||||
('''`' includes: currentCharacter) ifTrue: [
|
||||
^ self recordAndReportMatch: #( 8 ) ].
|
||||
(currentCharacter isSeparator or: [
|
||||
currentCharacter == Character pageUp ]) ifTrue: [
|
||||
^ self scanForTokenX6 ].
|
||||
currentCharacter isUppercase ifTrue: [ ^ self scanForTokenX3 ].
|
||||
(currentCharacter isLowercase or: [
|
||||
('!$' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $* and: $+) or: [
|
||||
('-/:' includes: currentCharacter) or: [
|
||||
(currentCharacter between: $< and: $?) or: [
|
||||
currentCharacter == $_ ] ] ] ] ]) ifTrue: [
|
||||
self scanForTokenX4 ].
|
||||
^ self reportLastMatch
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpScanner >> tokenActions [
|
||||
|
||||
^ #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment
|
||||
#whitespace )
|
||||
]
|
||||
|
40
src/Carp/CarpStartNode.class.st
Normal file
40
src/Carp/CarpStartNode.class.st
Normal file
@@ -0,0 +1,40 @@
|
||||
Class {
|
||||
#name : #CarpStartNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'expressions'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStartNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitStart: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStartNode >> compositeNodeVariables [
|
||||
|
||||
^ #( #expressions )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStartNode >> expressions [
|
||||
|
||||
^ expressions
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStartNode >> expressions: anOrderedCollection [
|
||||
|
||||
self setParents: self expressions to: nil.
|
||||
expressions := anOrderedCollection.
|
||||
self setParents: self expressions to: self
|
||||
]
|
||||
|
||||
{ #category : #'generated-initialize-release' }
|
||||
CarpStartNode >> initialize [
|
||||
super initialize.
|
||||
expressions := OrderedCollection new: 2.
|
||||
]
|
32
src/Carp/CarpStringNode.class.st
Normal file
32
src/Carp/CarpStringNode.class.st
Normal file
@@ -0,0 +1,32 @@
|
||||
Class {
|
||||
#name : #CarpStringNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStringNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitString: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStringNode >> tokenVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStringNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpStringNode >> value: aSmaCCToken [
|
||||
|
||||
value := aSmaCCToken
|
||||
]
|
34
src/Carp/CarpUnquoteNode.class.st
Normal file
34
src/Carp/CarpUnquoteNode.class.st
Normal file
@@ -0,0 +1,34 @@
|
||||
Class {
|
||||
#name : #CarpUnquoteNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpUnquoteNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitUnquote: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpUnquoteNode >> nodeVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpUnquoteNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpUnquoteNode >> value: aCarpExpressionNode [
|
||||
|
||||
self value notNil ifTrue: [ self value parent: nil ].
|
||||
value := aCarpExpressionNode.
|
||||
self value notNil ifTrue: [ self value parent: self ]
|
||||
]
|
32
src/Carp/CarpVariableNode.class.st
Normal file
32
src/Carp/CarpVariableNode.class.st
Normal file
@@ -0,0 +1,32 @@
|
||||
Class {
|
||||
#name : #CarpVariableNode,
|
||||
#superclass : #CarpExpressionNode,
|
||||
#instVars : [
|
||||
'value'
|
||||
],
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
CarpVariableNode >> acceptVisitor: anExpressionVisitor [
|
||||
|
||||
^ anExpressionVisitor visitVariable: self
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpVariableNode >> tokenVariables [
|
||||
|
||||
^ #( #value )
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpVariableNode >> value [
|
||||
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
CarpVariableNode >> value: aSmaCCToken [
|
||||
|
||||
value := aSmaCCToken
|
||||
]
|
84
src/Carp/TCarpExpressionNodeVisitor.trait.st
Normal file
84
src/Carp/TCarpExpressionNodeVisitor.trait.st
Normal file
@@ -0,0 +1,84 @@
|
||||
Trait {
|
||||
#name : #TCarpExpressionNodeVisitor,
|
||||
#traits : 'TSmaCCParseNodeVisitor',
|
||||
#classTraits : 'TSmaCCParseNodeVisitor classTrait',
|
||||
#category : #Carp
|
||||
}
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitArray: anArray [
|
||||
|
||||
^ self visitExpression: anArray
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitCharacter: aCharacter [
|
||||
|
||||
^ self visitExpression: aCharacter
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitDeref: aDeref [
|
||||
|
||||
^ self visitExpression: aDeref
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitExpression: anExpression [
|
||||
|
||||
^ self visitSmaCCParseNode: anExpression
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitList: aList [
|
||||
|
||||
^ self visitExpression: aList
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitModuleOrType: aModuleOrType [
|
||||
|
||||
^ self visitExpression: aModuleOrType
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitNumber: aNumber [
|
||||
|
||||
^ self visitExpression: aNumber
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitQuote: aQuote [
|
||||
|
||||
^ self visitExpression: aQuote
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitRef: aRef [
|
||||
|
||||
^ self visitExpression: aRef
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitStart: aStart [
|
||||
|
||||
^ self visitExpression: aStart
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitString: aString [
|
||||
|
||||
^ self visitExpression: aString
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitUnquote: anUnquote [
|
||||
|
||||
^ self visitExpression: anUnquote
|
||||
]
|
||||
|
||||
{ #category : #generated }
|
||||
TCarpExpressionNodeVisitor >> visitVariable: aVariable [
|
||||
|
||||
^ self visitExpression: aVariable
|
||||
]
|
Reference in New Issue
Block a user