More Related Content More from Yuriy Tymchuk (15) Modeling ASTs with FAST (mooseday13)9. PROBLEM?
• Calculating metrics
• Rule checking
• Detecting duplication
• Representing (eg. visualizing)
• Language conversions
• And more…
16. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
17. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
18. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
19. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
20. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
21. GENERAL FAST DIAGRAM
0..1
parentExpression**
FASTStatement
0..* FASTExpression
0..1
statements parentStatement**
0..1
parentBehaviouralEntity 0..1
FASTStatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
FASTVariableExpression FASTLiteral
parentBehaviouralEntity statementBlock
signature : string
0..* FASTNamedEntity 0..1 0..1
localVariables variable parentVariableExpression
name : String
0..* 0..* 0..1 FAMIXNamedEntity
parameters fastNamedEntities famixNamedEntity
FASTNamedBehaviouralEntity
0..1 0..1 FAMIXBehaviouralEntity
name : String fastNamedBehaviouralEntity famixBehaviouralEntity
22. SMALLTALK FAST
DIAGRAM
FASTStatement
0..*
statements
0..1
parentBehaviouralEntity
FASTBehaviouralEntity 0..1
FASTStatementBlock
parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
FASTSmalltalkReturnStatement
0..1
parentStatement 0..1
FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression
0..1 expression
name : String 0..1
block FASTSmalltalkExpressionStatement 0..1
parentStatement 0..1 concreteReceiver
fastNamedBehaviouralEntity 0..1 expression
0..*
0..1
famixBehaviouralEntity 0..1 arguments
expression
FAMIXBehaviouralEntity
0..* 0..1
contents receiver
parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1
FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend
signature : String kind
selector
isUnary() 0..1
parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1
isBinary()
contents parentExpression
0..* isKey()
variable 0..1 variable 0..1
0..* FASTNamedEntity messages cascaded()
receiver()
localVariables
name : String
0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral
messageSend 0..1
parameters value : Object value : String
fastNamedEntities 0..*
invocation 0..1
FAMIXInvocation
contents 0..*
famixNamedEntity 0..1
FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral
FAMIXNamedEntity
value : Number value : Object value : Boolean
23. SMALLTALK FAST
DIAGRAM
FASTStatement
0..*
statements
0..1
parentBehaviouralEntity
FASTBehaviouralEntity 0..1
FASTStatementBlock
parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
FASTSmalltalkReturnStatement
0..1
parentStatement 0..1
FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression
0..1 expression
name : String 0..1
block FASTSmalltalkExpressionStatement 0..1
parentStatement 0..1 concreteReceiver
fastNamedBehaviouralEntity 0..1 expression
0..*
0..1
famixBehaviouralEntity 0..1 arguments
expression
FAMIXBehaviouralEntity
0..* 0..1
contents receiver
parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1
FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend
signature : String kind
selector
isUnary() 0..1
parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1
isBinary()
contents parentExpression
0..* isKey()
variable 0..1 variable 0..1
0..* FASTNamedEntity messages cascaded()
receiver()
localVariables
name : String
0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral
messageSend 0..1
parameters value : Object value : String
fastNamedEntities 0..*
invocation 0..1
FAMIXInvocation
contents 0..*
famixNamedEntity 0..1
FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral
FAMIXNamedEntity
value : Number value : Object value : Boolean
24. SMALLTALK FAST
DIAGRAM
FASTStatement
0..*
statements
0..1
parentBehaviouralEntity
FASTBehaviouralEntity 0..1
FASTStatementBlock
parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
FASTSmalltalkReturnStatement
0..1
parentStatement 0..1
FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression
0..1 expression
name : String 0..1
block FASTSmalltalkExpressionStatement 0..1
parentStatement 0..1 concreteReceiver
fastNamedBehaviouralEntity 0..1 expression
0..*
0..1
famixBehaviouralEntity 0..1 arguments
expression
FAMIXBehaviouralEntity
0..* 0..1
contents receiver
parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1
FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend
signature : String kind
selector
isUnary() 0..1
parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1
isBinary()
contents parentExpression
0..* isKey()
variable 0..1 variable 0..1
0..* FASTNamedEntity messages cascaded()
receiver()
localVariables
name : String
0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral
messageSend 0..1
parameters value : Object value : String
fastNamedEntities 0..*
invocation 0..1
FAMIXInvocation
contents 0..*
famixNamedEntity 0..1
FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral
FAMIXNamedEntity
value : Number value : Object value : Boolean
25. SMALLTALK FAST
DIAGRAM
FASTStatement
0..*
statements
0..1
parentBehaviouralEntity
FASTBehaviouralEntity 0..1
FASTStatementBlock
parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
FASTSmalltalkReturnStatement
0..1
parentStatement 0..1
FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression
0..1 expression
name : String 0..1
block FASTSmalltalkExpressionStatement 0..1
parentStatement 0..1 concreteReceiver
fastNamedBehaviouralEntity 0..1 expression
0..*
0..1
famixBehaviouralEntity 0..1 arguments
expression
FAMIXBehaviouralEntity
0..* 0..1
contents receiver
parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1
FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend
signature : String kind
selector
isUnary() 0..1
parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1
isBinary()
contents parentExpression
0..* isKey()
variable 0..1 variable 0..1
0..* FASTNamedEntity messages cascaded()
receiver()
localVariables
name : String
0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral
messageSend 0..1
parameters value : Object value : String
fastNamedEntities 0..*
invocation 0..1
FAMIXInvocation
contents 0..*
famixNamedEntity 0..1
FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral
FAMIXNamedEntity
value : Number value : Object value : Boolean
26. SMALLTALK FAST
DIAGRAM
FASTStatement
0..*
statements
0..1
parentBehaviouralEntity
FASTBehaviouralEntity 0..1
FASTStatementBlock
parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
FASTSmalltalkReturnStatement
0..1
parentStatement 0..1
FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression
0..1 expression
name : String 0..1
block FASTSmalltalkExpressionStatement 0..1
parentStatement 0..1 concreteReceiver
fastNamedBehaviouralEntity 0..1 expression
0..*
0..1
famixBehaviouralEntity 0..1 arguments
expression
FAMIXBehaviouralEntity
0..* 0..1
contents receiver
parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1
FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend
signature : String kind
selector
isUnary() 0..1
parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1
isBinary()
contents parentExpression
0..* isKey()
variable 0..1 variable 0..1
0..* FASTNamedEntity messages cascaded()
receiver()
localVariables
name : String
0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral
messageSend 0..1
parameters value : Object value : String
fastNamedEntities 0..*
invocation 0..1
FAMIXInvocation
contents 0..*
famixNamedEntity 0..1
FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral
FAMIXNamedEntity
value : Number value : Object value : Boolean
27. RB CASCADE DESIGN
RECEIVER Message1 arguments…
Cascade Message2 arguments…
Message3 arguments…
28. FAST CASCADE DESIGN
Message1 arguments…
RECEIVER Cascade Message2 arguments…
Message3 arguments…
29. SMALLTALK / JAVA
COMPARISON
Smalltalk Java
30
23
15
8
Statements
0
Expression
31. JAVA FAST DIAGRAM
FASTStatement
0..* 0..1
statements body
0..1
parentBehaviouralEntity 0..1
StatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
0..1
FASTNamedBehaviouralEntity FASTWhileStatement
parentStatement
name : String
FASTJavaReturnStatement
0..1 0..1
FASTExpression
FASTJavaExpressionStatement parentStatement condition
fastNamedBehaviouralEntity 0..1 0..1 0..1
famixBehaviouralEntity 0..1 parentStatement expression
FASTVariableDeclarationStatement 0..1 0..1 0..1
FAMIXBehaviouralEntity
parentStatement expression rightOperand
0..1 0..* 0..1
FASTVariableDeclarator 0..1
parentStatement declarators leftOperand
initializer
0..* FASTNamedEntity 0..1
localVariables variable
0..* name : String
FASTVariableExpression FASTLiteral FASTInfixOperation 0..1
parameters 0..1 0..1
parentVariableExpression signature : string parentExpression
variable
fastNamedEntities 0..* 0..1
famixNamedEntity 0..1 parentExpression
FAMIXNamedEntity
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
32. JAVA FAST DIAGRAM
FASTStatement
0..* 0..1
statements body
0..1
parentBehaviouralEntity 0..1
StatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
0..1
FASTNamedBehaviouralEntity FASTWhileStatement
parentStatement
name : String
FASTJavaReturnStatement
0..1 0..1
FASTExpression
FASTJavaExpressionStatement parentStatement condition
fastNamedBehaviouralEntity 0..1 0..1 0..1
famixBehaviouralEntity 0..1 parentStatement expression
FASTVariableDeclarationStatement 0..1 0..1 0..1
FAMIXBehaviouralEntity
parentStatement expression rightOperand
0..1 0..* 0..1
FASTVariableDeclarator 0..1
parentStatement declarators leftOperand
initializer
0..* FASTNamedEntity 0..1
localVariables variable
0..* name : String
FASTVariableExpression FASTLiteral FASTInfixOperation 0..1
parameters 0..1 0..1
parentVariableExpression signature : string parentExpression
variable
fastNamedEntities 0..* 0..1
famixNamedEntity 0..1 parentExpression
FAMIXNamedEntity
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
33. JAVA FAST DIAGRAM
FASTStatement
0..* 0..1
statements body
0..1
parentBehaviouralEntity 0..1
StatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
0..1
FASTNamedBehaviouralEntity FASTWhileStatement
parentStatement
name : String
FASTJavaReturnStatement
0..1 0..1
FASTExpression
FASTJavaExpressionStatement parentStatement condition
fastNamedBehaviouralEntity 0..1 0..1 0..1
famixBehaviouralEntity 0..1 parentStatement expression
FASTVariableDeclarationStatement 0..1 0..1 0..1
FAMIXBehaviouralEntity
parentStatement expression rightOperand
0..1 0..* 0..1
FASTVariableDeclarator 0..1
parentStatement declarators leftOperand
initializer
0..* FASTNamedEntity 0..1
localVariables variable
0..* name : String
FASTVariableExpression FASTLiteral FASTInfixOperation 0..1
parameters 0..1 0..1
parentVariableExpression signature : string parentExpression
variable
fastNamedEntities 0..* 0..1
famixNamedEntity 0..1 parentExpression
FAMIXNamedEntity
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
34. JAVA FAST DIAGRAM
FASTStatement
0..* 0..1
statements body
0..1
parentBehaviouralEntity 0..1
StatementBlock
FASTBehaviouralEntity parentStatementBlock
0..1 0..1
parentBehaviouralEntity statementBlock
0..1
FASTNamedBehaviouralEntity FASTWhileStatement
parentStatement
name : String
FASTJavaReturnStatement
0..1 0..1
FASTExpression
FASTJavaExpressionStatement parentStatement condition
fastNamedBehaviouralEntity 0..1 0..1 0..1
famixBehaviouralEntity 0..1 parentStatement expression
FASTVariableDeclarationStatement 0..1 0..1 0..1
FAMIXBehaviouralEntity
parentStatement expression rightOperand
0..1 0..* 0..1
FASTVariableDeclarator 0..1
parentStatement declarators leftOperand
initializer
0..* FASTNamedEntity 0..1
localVariables variable
0..* name : String
FASTVariableExpression FASTLiteral FASTInfixOperation 0..1
parameters 0..1 0..1
parentVariableExpression signature : string parentExpression
variable
fastNamedEntities 0..* 0..1
famixNamedEntity 0..1 parentExpression
FAMIXNamedEntity
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
37. SYMBOL RESOLUTION
a
b
#middleOf:and:
middleOf: a and: b sum
| sum | st ^st
sum := a + b.
^ sum / 2 := /
sum + sum 2
a b
40. RESOLVING SYMBOLS
Scope
• name-variable dictionary
• parent scope
• owner entity
Scope
• name-variable dictionary
• parent scope
• owner entity
43. CYCLOMATIC COMPLEXITY
Each node knows it’s complexity contribution
• Class = 0
• ReturnStatement = 0
• IfStatement = 1
• WhileStatement = 1
• MessageSend (#ifTrue:) = 1
calculated at runtime
• MessageSend (#detect:ifNone:) = 2
• “for ... else” statement = 2
python
45. FAST GSOC
FAST Java Model Tree models visualization
The goal of this project is to create a The idea behind this project is to
Java version of FAST. develop an inter active tree
visualization that will gradually
improve analysis of the underlying
model.