Skip to content

Commit

Permalink
Merge pull request #59 from moosetechnology/38-fix
Browse files Browse the repository at this point in the history
adding assignmentExpression entity, assigning init of loopControl to it
  • Loading branch information
lsafina committed Sep 25, 2023
2 parents 8d64330 + 53d107b commit a06b9cb
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 8 deletions.
95 changes: 95 additions & 0 deletions src/FAST-Fortran-Entities/FASTFortranAssignmentExpression.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"
I represent an assignment expression as a part of assignment statement
"
Class {
#name : #FASTFortranAssignmentExpression,
#superclass : #FASTFortranEntity,
#traits : 'FASTFortranTExpression',
#classTraits : 'FASTFortranTExpression classTrait',
#instVars : [
'#leftPart => FMOne type: #FASTFortranVariable opposite: #parentAssignmentExpression',
'#rightPart => FMOne type: #FASTFortranVariable opposite: #parentAssignmentExpression',
'#parentLoopControlExpresison => FMOne type: #FASTFortranLoopControlExpression opposite: #init'
],
#category : #'FAST-Fortran-Entities-Entities'
}

{ #category : #meta }
FASTFortranAssignmentExpression class >> annotation [

<FMClass: #AssignmentExpression super: #FASTFortranEntity>
<package: #'FAST-Fortran-Entities'>
<generated>
^ self
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> leftPart [
"Relation named: #leftPart type: #FASTFortranVariable opposite: #parentAssignmentExpression"

<generated>
<FMComment: 'assignee'>
^ leftPart
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> leftPart: anObject [

<generated>
leftPart := anObject
]

{ #category : #navigation }
FASTFortranAssignmentExpression >> leftPartGroup [
<generated>
<navigation: 'LeftPart'>
^ MooseSpecializedGroup with: self leftPart
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> parentLoopControlExpresison [
"Relation named: #parentLoopControlExpresison type: #FASTFortranLoopControlExpression opposite: #init"

<generated>
<FMComment: 'Parent loop control expresison'>
<container>
<derived>
^ parentLoopControlExpresison
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> parentLoopControlExpresison: anObject [

<generated>
parentLoopControlExpresison := anObject
]

{ #category : #navigation }
FASTFortranAssignmentExpression >> parentLoopControlExpresisonGroup [
<generated>
<navigation: 'ParentLoopControlExpresison'>
^ MooseSpecializedGroup with: self parentLoopControlExpresison
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> rightPart [
"Relation named: #rightPart type: #FASTFortranVariable opposite: #parentAssignmentExpression"

<generated>
<FMComment: 'assigned'>
^ rightPart
]

{ #category : #accessing }
FASTFortranAssignmentExpression >> rightPart: anObject [

<generated>
rightPart := anObject
]

{ #category : #navigation }
FASTFortranAssignmentExpression >> rightPartGroup [
<generated>
<navigation: 'RightPart'>
^ MooseSpecializedGroup with: self rightPart
]
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ Class {
#traits : 'FASTFortranTExpression',
#classTraits : 'FASTFortranTExpression classTrait',
#instVars : [
'#init => FMProperty',
'#increment => FMProperty',
'#init => FMOne type: #FASTFortranAssignmentExpression opposite: #parentLoopControlExpresison',
'#limit => FMProperty',
'#parentLoop => FMOne type: #FASTFortranDoStatement opposite: #loopControl'
],
Expand Down Expand Up @@ -41,19 +41,27 @@ FASTFortranLoopControlExpression >> increment: anObject [

{ #category : #accessing }
FASTFortranLoopControlExpression >> init [
"Relation named: #init type: #FASTFortranAssignmentExpression opposite: #parentLoopControlExpresison"

<FMProperty: #init type: #String>
<generated>
<FMComment: 'Loop control initial value'>
<FMComment: 'initial assignment'>
^ init
]

{ #category : #accessing }
FASTFortranLoopControlExpression >> init: anObject [

<generated>
init := anObject
]

{ #category : #navigation }
FASTFortranLoopControlExpression >> initGroup [
<generated>
<navigation: 'Init'>
^ MooseSpecializedGroup with: self init
]

{ #category : #accessing }
FASTFortranLoopControlExpression >> limit [

Expand Down
7 changes: 7 additions & 0 deletions src/FAST-Fortran-Entities/FASTFortranTEntityCreator.trait.st
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ FASTFortranTEntityCreator >> newArrayVariable [
^ self add: FASTFortranArrayVariable new
]

{ #category : #'entity creation' }
FASTFortranTEntityCreator >> newAssignmentExpression [

<generated>
^ self add: FASTFortranAssignmentExpression new
]

{ #category : #'entity creation' }
FASTFortranTEntityCreator >> newAssignmentStatement [

Expand Down
26 changes: 26 additions & 0 deletions src/FAST-Fortran-Entities/FASTFortranVariable.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Class {
#classTraits : 'FASTFortranTExpression classTrait + FASTFortranTVariableEntity classTrait',
#instVars : [
'#name => FMProperty',
'#parentAssignmentExpression => FMOne type: #FASTFortranAssignmentExpression opposite: #leftPart',
'#parentDeclaration => FMOne type: #FASTFortranDeclarationStatement opposite: #declarators'
],
#category : #'FAST-Fortran-Entities-Entities'
Expand Down Expand Up @@ -37,6 +38,31 @@ FASTFortranVariable >> name: anObject [
name := anObject
]

{ #category : #accessing }
FASTFortranVariable >> parentAssignmentExpression [
"Relation named: #parentAssignmentExpression type: #FASTFortranAssignmentExpression opposite: #leftPart"

<generated>
<FMComment: 'Parent assignment expression'>
<container>
<derived>
^ parentAssignmentExpression
]

{ #category : #accessing }
FASTFortranVariable >> parentAssignmentExpression: anObject [

<generated>
parentAssignmentExpression := anObject
]

{ #category : #navigation }
FASTFortranVariable >> parentAssignmentExpressionGroup [
<generated>
<navigation: 'ParentAssignmentExpression'>
^ MooseSpecializedGroup with: self parentAssignmentExpression
]

{ #category : #accessing }
FASTFortranVariable >> parentDeclaration [
"Relation named: #parentDeclaration type: #FASTFortranDeclarationStatement opposite: #declarators"
Expand Down
28 changes: 23 additions & 5 deletions src/FAST-Fortran-Generator/FASTFortranGenerator.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ Class {
'tFortranUnaryExpression',
'booleanConstant',
'characterConstant',
'statementBlock'
'statementBlock',
'assignmentExpression'
],
#category : #'FAST-Fortran-Generator'
}
Expand Down Expand Up @@ -154,6 +155,11 @@ FASTFortranGenerator >> defineData [
'I represent a declaration statement for one or many variables'.

"EXPRESSIONS"

assignmentExpression := builder
newClassNamed: #AssignmentExpression
comment:
'I represent an assignment expression as a part of assignment statement'.

variable := builder
newClassNamed: #Variable
Expand Down Expand Up @@ -444,13 +450,13 @@ FASTFortranGenerator >> defineHierarchy [


"DATA"
assignmentExpression --|> tExpression.
functionCall --|> tExpression.
variable --|> tExpression.
variable --|> tVariableEntity.
variableScalar --|> variable.
variableArray --|> variable.
loopControlExpression --|> tExpression.

substring --|> tExpression.

binaryExpression --|> tBinaryExpression.
Expand Down Expand Up @@ -517,9 +523,6 @@ FASTFortranGenerator >> defineProperties [
(arrayDimensionDeclarator property: #ub type: #Number) comment:
'Upper bound'.

(loopControlExpression property: #init type: #String) comment:
'Loop control initial value'.

(loopControlExpression property: #increment type: #String) comment:
'Loop control increment value'.

Expand Down Expand Up @@ -589,6 +592,21 @@ FASTFortranGenerator >> defineRelations [
((unaryExpression property: #expression) comment: 'expression')
<>- ((tExpression property: #parentExpression) comment:
'Parent expression (if possible)').

((assignmentExpression property: #leftPart) comment: 'assignee')
<>-
((variable property: #parentAssignmentExpression) comment:
'Parent assignment expression').

((assignmentExpression property: #rightPart) comment: 'assigned')
<>-
((variable property: #parentAssignmentExpression) comment:
'Parent assignment expression').

((loopControlExpression property: #init) comment: 'initial assignment')
<>-
((assignmentExpression property: #parentLoopControlExpresison) comment:
'Parent loop control expresison').

((doStatement property: #loopControl) comment: 'loop control')
<>-
Expand Down

0 comments on commit a06b9cb

Please sign in to comment.