Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Modeling ASTs with FAST (mooseday13)
Yuriy Tymchuk
April 04, 2013
Science
1
76
Modeling ASTs with FAST (mooseday13)
Yuriy Tymchuk
April 04, 2013
Tweet
Share
More Decks by Yuriy Tymchuk
See All by Yuriy Tymchuk
uko
0
87
uko
0
97
uko
0
73
uko
0
82
uko
1
110
uko
0
43
uko
0
230
uko
0
63
uko
1
61
Other Decks in Science
See All in Science
lcolladotor
0
750
satokeiju
6
2.1k
shuntaros
0
150
shuntaros
0
160
itakeshi
3
1.3k
housecat442
0
310
shiftpn
1
370
ppillc
0
360
konakalab
1
1.3k
ianozsvald
0
450
yuya4
3
380
yuifu
1
1.7k
Featured
See All Featured
brettharned
93
3k
chriscoyier
499
130k
danielanewman
200
20k
sugarenia
233
840k
tanoku
86
8.5k
kneath
294
39k
zakiwarfel
88
3.3k
mongodb
23
3.8k
destraynor
223
47k
trishagee
20
2.1k
maggiecrowley
8
430
danielanewman
1
480
Transcript
MODELING ASTS WITH FAST Yuriy “Uko” Tymchuk
MOOSE
FAMIX
FAMIX
FAMIX Access Invocation
PROBLEM? • Calculating metrics • Rule checking • Detecting duplication
• Representing (eg. visualizing) • Language conversions • And more…
can’t handle that! AST FAMIX we need
FAST
FAST 0% 25% 50% 75% 100% Smalltalk Java
FAST
FAST IMPORTERS PetitParser
MODEL
GENERAL FAST DIAGRAM FASTBehaviouralEntity 0..* statements 0..1 parentStatementBlock FASTStatement FASTNamedEntity
name : String 0..* parameters 0..* localVariables FAMIXBehaviouralEntity 0..1 fastNamedBehaviouralEntity 0..1 famixBehaviouralEntity FAMIXNamedEntity 0..* fastNamedEntities 0..1 famixNamedEntity FASTNamedBehaviouralEntity name : String FASTExpression 0..1 parentBehaviouralEntity 0..1 parentExpression** 0..1 parentStatement** FASTStatementBlock 0..1 parentBehaviouralEntity 0..1 statementBlock FASTVariableExpression 0..1 parentVariableExpression 0..1 variable FASTLiteral signature : string
SMALLTALK FAST DIAGRAM FASTBehaviouralEntity 0..* statements 0..1 parentStatementBlock FASTVariableExpression FASTLiteral
signature : String FASTMessageSend kind selector isUnary() isBinary() isKey() cascaded() receiver() FASTStatement 0..1 parentExpression 0..* arguments FASTAssignmentExpression 0..1 parentAssignmentExpression 0..1 variable FASTExpression 0..1 parentStatement 0..1 expression FASTArrayExpression FASTCascade 0..1 parentCascade 0..* messages 0..1 parentExpression 0..1 concreteReceiver 0..1 parentExpression 0..1 block FASTSmalltalkReturnStatement FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 expression 0..1 parentExpression 0..1 expression FASTNamedEntity name : String 0..* parameters 0..* localVariables 0..1 parentVariableExpression 0..1 variable FASTBlockDefinition FAMIXBehaviouralEntity 0..1 fastNamedBehaviouralEntity 0..1 famixBehaviouralEntity FAMIXNamedEntity 0..* fastNamedEntities 0..1 famixNamedEntity FASTNamedBehaviouralEntity name : String FASTNumberLiteral value : Number FASTCharacterLiteral value : Object FASTStringLiteral value : String FASTSymbolLiteral value : Object FASTArrayLiteral FASTByteArrayLiteral 0..* contents 0..* contents FASTBlockExpression 0..1 parentExpression 0..* contents FASTBooleanLiteral value : Boolean FASTUndefinedLiteral 0..1 parentExpression 0..1 receiver 0..1 parentBehaviouralEntity FAMIXInvocation 0..1 messageSend 0..1 invocation FASTStatementBlock 0..1 parentBehaviouralEntity 0..1 statementBlock
RB CASCADE DESIGN Cascade Message1 arguments… Message2 arguments… Message3 arguments…
RECEIVER
FAST CASCADE DESIGN Cascade RECEIVER Message1 arguments… Message2 arguments… Message3
arguments…
SMALLTALK / JAVA COMPARISON 0 8 15 23 30 Statements
Expression Smalltalk Java
http://uko-on-code.blogspot.com
JAVA FAST DIAGRAM FASTBehaviouralEntity 0..* statements 0..1 parentStatementBlock FASTStatement FASTNamedEntity
name : String 0..* parameters 0..* localVariables FAMIXBehaviouralEntity 0..1 fastNamedBehaviouralEntity 0..1 famixBehaviouralEntity FAMIXNamedEntity 0..* fastNamedEntities 0..1 famixNamedEntity FASTNamedBehaviouralEntity name : String FASTExpression 0..1 parentBehaviouralEntity StatementBlock 0..1 parentBehaviouralEntity 0..1 statementBlock FASTVariableExpression 0..1 parentVariableExpression 0..1 variable FASTLiteral signature : string FASTJavaExpressionStatement FASTJavaReturnStatement 0..1 parentStatement 0..1 expression 0..1 parentStatement 0..1 expression FASTWhileStatement 0..1 parentStatement 0..1 condition 0..1 parentStatement 0..1 body FASTVariableDeclarationStatement FASTVariableDeclarator 0..1 parentStatement 0..* declarators 0..1 variable 0..1 initializer FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral FASTInfixOperation 0..1 parentExpression 0..1 leftOperand 0..1 parentExpression 0..1 rightOperand
FAST ANALYSES
SYMBOL RESOLUTION #middleOf:and: b a sum ^st st := sum
+ a b / sum 2 middleOf: a and: b | sum | sum := a + b. ^ sum / 2
SYMBOL RESOLUTION b a sum #middleOf:and: b a sum ^st
st := sum + a b / sum 2
SYMBOL RESOLUTION b a sum #middleOf:and: b a sum ^st
st := sum + a b / sum 2
RESOLVING SYMBOLS Scope • name-variable dictionary • parent scope •
owner entity Scope • name-variable dictionary • parent scope • owner entity
CALCULATING METRICS • nodes of a Kind • cyclomatic complexity
Amount of something in code
CALCULATING METRICS collection inject: initial into: [block] CollectorVisitor newWithSeed: initial
andBlock: [block]
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
FAST CONTRIBUTION http://smalltalkhub.com/#!/~YuriyTymchuk/FAST https://github.com/Uko/FAST https://ci.inria.fr/moose/job/FAST-On-Moose
FAST GSOC FAST Java Model Tree models visualization The idea
behind this project is to develop an inter active tree visualization that will gradually improve analysis of the underlying model. The goal of this project is to create a Java version of FAST.
THANKS Stéphane Ducasse Nicolas Anquetil RMoD team
FAST