Skip to content

Commit

Permalink
More grammar / parser work on Macro Fog.
Browse files Browse the repository at this point in the history
  • Loading branch information
martinmcclure committed Sep 16, 2015
1 parent ad4f2e3 commit dbdb547
Show file tree
Hide file tree
Showing 34 changed files with 104 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
assignmentExpression
^ assignment , expression
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
binaryExpression
^ unaryExpression , binaryMessage optional
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
grammar
binaryMessage
^ (binaryToken , binaryExpression) ==> [ :nodes |
Array
with: (Array with: nodes first)
with: (Array with: nodes second) ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
expression
^ assignmentExpression / cascadeExpression
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
unaryExpression
^ ((unaryExpression , unaryMessage) / primary) memoized
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@
"class" : {
"allowUnderscoreAssignment" : "MartinMcClure 9/14/2015 22:34" },
"instance" : {
"assignmentExpression" : "MartinMcClure 9/15/2015 21:10",
"binaryExpression" : "MartinMcClure 9/15/2015 22:35",
"binaryMessage" : "MartinMcClure 9/15/2015 22:36",
"expression" : "MartinMcClure 9/15/2015 21:10",
"impliedReturnSelf" : "MartinMcClure 9/13/2015 21:29",
"method" : "MartinMcClure 1/12/2015 22:17",
"methodSequence" : "MartinMcClure 9/14/2015 21:41",
"primitiveMethodBody" : "MartinMcClure 1/12/2015 22:17",
"primitivePragma" : "MartinMcClure 1/11/2015 23:49",
"restOfText" : "MartinMcClure 1/11/2015 23:55",
"statement" : "MartinMcClure 9/13/2015 21:32",
"statements" : "MartinMcClure 9/13/2015 21:30" } }
"statements" : "MartinMcClure 9/13/2015 21:30",
"unaryExpression" : "MartinMcClure 9/15/2015 23:33" } }
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"restOfText",
"primitiveMethodBody",
"impliedReturnSelf",
"statement" ],
"statement",
"assignmentExpression" ],
"name" : "MistGrammar",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
assignment
^ super assignment map: [ :variable :assignmentToken | variable ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
grammar
assignmentExpression
^ super assignmentExpression
map: [ :variable :expression | FogAssignmentNode variable: variable expression: expression ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
grammar
cascadeExpression
^ super cascadeExpression
map: [ :keywordExpression :cascadeMessages |
cascadeMessages isEmpty
ifFalse: [ self error: 'Cascades are not yet supported.' ].
keywordExpression ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
grammar
keywordExpression
^ super keywordExpression
map: [ :binaryExpression :keywordMessage |
keywordMessage isNil
ifTrue: [ binaryExpression ]
ifFalse: [
FogMessageSendNode
receiver: binaryExpression
selector: (keywordMessage first inject: '' into: [ :selector :next | selector , next ])
arguments: keywordMessage second ] ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
grammar
variable
^ super variable ==> [ :variableName | FogVariableReferenceNode variableName: variableName ]
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@
"class" : {
},
"instance" : {
"assignment" : "MartinMcClure 9/15/2015 21:18",
"assignmentExpression" : "MartinMcClure 9/15/2015 21:19",
"cascadeExpression" : "MartinMcClure 9/15/2015 21:47",
"identifierToken" : "MartinMcClure 9/14/2015 22:40",
"impliedReturnSelf" : "MartinMcClure 9/14/2015 22:05",
"keywordExpression" : "MartinMcClure 9/15/2015 22:03",
"keywordToken" : "MartinMcClure 9/14/2015 22:48",
"method" : "MartinMcClure 9/13/2015 11:47",
"methodDeclaration" : "MartinMcClure 9/14/2015 22:43",
"methodSequence" : "MartinMcClure 9/14/2015 21:57",
"temporaries" : "MartinMcClure 9/14/2015 22:44" } }
"temporaries" : "MartinMcClure 9/14/2015 22:44",
"variable" : "MartinMcClure 9/15/2015 21:22" } }
2 changes: 1 addition & 1 deletion packages/Mist-Compiler.package/monticello.meta/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(name 'Mist-Compiler-MartinMcClure.5' message 'A few more things are parsing correctly.Notably: The implied ^self is now working, some things have gotten simpler, and variables now work.' id 'f1c7366b-57fd-4f64-a0f1-24cd484c5b64' date '14 September 2015' time '10:56:08.448405 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.4' message ' Got a bit further on parsing.' id '5ff2bc39-00bf-4cc1-a49c-86ec570c053b' date '13 September 2015' time '10:04:13.299036 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.3' message 'The beginnings of a parser to parse into Macro Fog nodes.' id '5e15043e-4f73-4334-8699-f9918acf1461' date '13 September 2015' time '1:31:16.991295 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.2' message 'A sketch of the compiler structure for modules, classes, behaviors, and methods. It''s now ready to have more work done on the grammar and parser.' id 'fb3d8d8b-bfac-4790-b673-49c6c7cde93e' date '25 January 2015' time '11:07:56.693885 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.1' message 'The very very small beginnings of a Mist parser, based on PetitSmalltalk''s grammar.' id 'f9b0bfa0-2762-481c-8635-dafd4010e901' date '14 January 2015' time '7:29:44.834529 pm' author 'MartinMcClure' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
(name 'Mist-Compiler-MartinMcClure.6' message 'More grammar / parser work on Macro Fog.' id '13e8a078-5f26-498b-8c12-b3d7de7be157' date '15 September 2015' time '11:36:44.579295 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.5' message 'A few more things are parsing correctly.Notably: The implied ^self is now working, some things have gotten simpler, and variables now work.' id 'f1c7366b-57fd-4f64-a0f1-24cd484c5b64' date '14 September 2015' time '10:56:08.448405 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.4' message ' Got a bit further on parsing.' id '5ff2bc39-00bf-4cc1-a49c-86ec570c053b' date '13 September 2015' time '10:04:13.299036 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.3' message 'The beginnings of a parser to parse into Macro Fog nodes.' id '5e15043e-4f73-4334-8699-f9918acf1461' date '13 September 2015' time '1:31:16.991295 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.2' message 'A sketch of the compiler structure for modules, classes, behaviors, and methods. It''s now ready to have more work done on the grammar and parser.' id 'fb3d8d8b-bfac-4790-b673-49c6c7cde93e' date '25 January 2015' time '11:07:56.693885 pm' author 'MartinMcClure' ancestors ((name 'Mist-Compiler-MartinMcClure.1' message 'The very very small beginnings of a Mist parser, based on PetitSmalltalk''s grammar.' id 'f9b0bfa0-2762-481c-8635-dafd4010e901' date '14 January 2015' time '7:29:44.834529 pm' author 'MartinMcClure' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
instance creation
variable: variableNode expression: expressionNode
^ self new variable: variableNode expression: expressionNode
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
initialization
variable: variableNode expression: expressionNode
variable := variableNode.
expression := expressionNode
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"class" : {
},
"variable:expression:" : "MartinMcClure 9/15/2015 21:14" },
"instance" : {
} }
"variable:expression:" : "MartinMcClure 9/15/2015 21:15" } }
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
],
"commentStamp" : "",
"instvars" : [
],
"variable",
"expression" ],
"name" : "FogAssignmentNode",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
instance creation
receiver: receiver selector: selector arguments: arguments
^ self new receiver: receiver selector: selector arguments: arguments
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
instance creation
receiver: aReceiver selector: aSelector arguments: argumentNodes
receiver := aReceiver.
selector := aSelector.
arguments := argumentNodes
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"class" : {
},
"receiver:selector:arguments:" : "MartinMcClure 9/15/2015 21:54" },
"instance" : {
} }
"receiver:selector:arguments:" : "MartinMcClure 9/15/2015 21:55" } }
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
],
"commentStamp" : "",
"instvars" : [
],
"receiver",
"selector",
"arguments" ],
"name" : "FogMessageSendNode",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
initialization
methodDeclaration: methodDeclaration methodSequence: methodSequence
selectorParts := methodDeclaration first.
selector := methodDeclaration first inject: '' into: [ :composite :nextPart | composite , nextPart ].
parameters := methodDeclaration last.
methodBody := methodSequence
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"class" : {
"methodDeclaration:methodSequence:" : "MartinMcClure 9/13/2015 11:48" },
"instance" : {
"methodDeclaration:methodSequence:" : "MartinMcClure 9/13/2015 19:31" } }
"methodDeclaration:methodSequence:" : "MartinMcClure 9/15/2015 22:10" } }
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
],
"commentStamp" : "",
"instvars" : [
"selectorParts",
"parameters",
"methodBody" ],
"methodBody",
"selector" ],
"name" : "FogMethodNode",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
initialization
temporaries: temporaries statements: statements
variableNames := temporaries.
variables := temporaries.
childNode := FogSequenceNode with: statements
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"class" : {
"temporaries:statements:" : "MartinMcClure 9/13/2015 19:42" },
"instance" : {
"temporaries:statements:" : "MartinMcClure 9/13/2015 19:43" } }
"temporaries:statements:" : "MartinMcClure 9/15/2015 21:26" } }
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
],
"commentStamp" : "",
"instvars" : [
"variableNames",
"childNode" ],
"childNode",
"variables" ],
"name" : "FogTempVarScopeNode",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
printing
printOn: aStream
aStream
nextPutAll: 'variable: ';
nextPutAll: variableName
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
"class" : {
"variableName:" : "MartinMcClure 9/14/2015 22:03" },
"instance" : {
"printOn:" : "MartinMcClure 9/15/2015 21:25",
"variableName:" : "MartinMcClure 9/14/2015 22:04" } }
2 changes: 1 addition & 1 deletion packages/Mist-MacroFog.package/monticello.meta/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(name 'Mist-MacroFog-MartinMcClure.3' message 'A few more things are parsing correctly.' id 'b3706c66-05e9-4ee1-acaf-82e967672700' date '14 September 2015' time '10:53:59.871746 pm' author 'MartinMcClure' ancestors ((name 'Mist-MacroFog-MartinMcClure.2' message 'Got a bit further on parsing.' id '4070ac8f-0837-4d2d-aa91-bd81f6b2fcd0' date '13 September 2015' time '10:04:25.258538 pm' author 'MartinMcClure' ancestors ((name 'Mist-MacroFog-MartinMcClure.1' message 'The beginnings of a parser to parse into Macro Fog nodes.' id '1374cf2f-f54c-4e7d-9bbb-c56d835a6c84' date '13 September 2015' time '1:32:09.395157 pm' author 'MartinMcClure' ancestors () stepChildren ())) stepChildren ())) stepChildren ())
(name 'Mist-MacroFog-MartinMcClure.4' message 'More grammar / parser work on Macro Fog.' id 'cb14028c-ba32-4354-b9dd-83d2be77e8b1' date '15 September 2015' time '11:37:10.344043 pm' author 'MartinMcClure' ancestors ((name 'Mist-MacroFog-MartinMcClure.3' message 'A few more things are parsing correctly.' id 'b3706c66-05e9-4ee1-acaf-82e967672700' date '14 September 2015' time '10:53:59.871746 pm' author 'MartinMcClure' ancestors ((name 'Mist-MacroFog-MartinMcClure.2' message 'Got a bit further on parsing.' id '4070ac8f-0837-4d2d-aa91-bd81f6b2fcd0' date '13 September 2015' time '10:04:25.258538 pm' author 'MartinMcClure' ancestors ((name 'Mist-MacroFog-MartinMcClure.1' message 'The beginnings of a parser to parse into Macro Fog nodes.' id '1374cf2f-f54c-4e7d-9bbb-c56d835a6c84' date '13 September 2015' time '1:32:09.395157 pm' author 'MartinMcClure' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ foo: aFoo bar: aBar
"A test method with a keyword selector and just about everything else except blocks.
Assumes instvars inst1 and inst2 exist in the context, and other variable AClass exists."
| temp1 temp2 |
3 foo bar.
aBar size + aFoo printOn: inst1.
temp1 := temp2 := inst1 := aBar ceaseToExist.
temp1 := AClass new: 32.
temp2 := ''stream literal''.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"class" : {
},
"instance" : {
"testSourceParseMethodKeyword" : "MartinMcClure 9/14/2015 21:44" } }
"testSourceParseMethodKeyword" : "MartinMcClure 9/15/2015 23:35" } }
Loading

0 comments on commit dbdb547

Please sign in to comment.