Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Modeling ASTs with FAST (mooseday13)
Search
Yuriy Tymchuk
April 04, 2013
Science
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Modeling ASTs with FAST (mooseday13)
Yuriy Tymchuk
April 04, 2013
More Decks by Yuriy Tymchuk
See All by Yuriy Tymchuk
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
uko
0
370
Renraku — the One Static Analysis Model to Rule Them All (iwst2017)
uko
0
230
Pharo Quality Engine: The Last Strokes (esug2017)
uko
0
170
The False False Positives of Static Analysis (sattose2017)
uko
0
130
Про що не говорять програмісти, про що мовчать науковці MK2 (ucu2016)
uko
1
190
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
uko
0
260
Stories About Renraku — the new Quality Model of Pharo (esug2016)
uko
0
390
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016)
uko
0
330
Про що не говорять програмісти, про що мовчать науковці (ucu2015)
uko
1
150
Other Decks in Science
See All in Science
東北地方における過去20年間の降水量の変化
naokimuroki
1
330
AIPシンポジウム 2025年度 成果報告会 「因果推論チーム」
sshimizu2006
3
550
機械学習 - DBSCAN
trycycle
PRO
0
1.9k
SHINOMIYA Nariyoshi
genomethica
0
160
俺たちは本当に分かり合えるのか? ~ PdMとスクラムチームの “ずれ” を科学する
bonotake
2
2.5k
機械学習 - 決定木からはじめる機械学習
trycycle
PRO
0
1.5k
20260410_SystemsThinking
takusamar
1
110
因果推論と機械学習
sshimizu2006
1
1.2k
水耕栽培:古代の知恵から宇宙農業まで
grow_design_lab
0
150
次代のデータサイエンティストへ~スキルチェックリスト、タスクリスト更新~
datascientistsociety
PRO
3
46k
Rashomon at the Sound: Reconstructing all possible paleoearthquake histories in the Puget Lowland through topological search
cossatot
0
1.1k
Endel Tulvingとエピソード記憶
rmaruy
0
150
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
38k
We Are The Robots
honzajavorek
0
270
Between Models and Reality
mayunak
4
370
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
Code Review Best Practice
trishagee
74
20k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Ethics towards AI in product and experience design
skipperchong
2
330
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
410
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
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