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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
360
Renraku — the One Static Analysis Model to Rule Them All (iwst2017)
uko
0
220
Pharo Quality Engine: The Last Strokes (esug2017)
uko
0
160
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
380
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016)
uko
0
320
Про що не говорять програмісти, про що мовчать науковці (ucu2015)
uko
1
150
Other Decks in Science
See All in Science
共生概念の整理と AIアライメントの構想
hiroakihamada
0
220
なぜ21は素因数分解されないのか? - Shorのアルゴリズムの現在と壁
daimurat
0
450
医療 LLM ベンチマークの現在地:多面的評価 と日本ローカライズ
analokmaus
1
500
先端因果推論特別研究チームの研究構想と 人間とAIが協働する自律因果探索の展望
sshimizu2006
3
930
俺たちは本当に分かり合えるのか? ~ PdMとスクラムチームの “ずれ” を科学する
bonotake
2
2.4k
KISHIMOTO Atsuo
genomethica
0
150
ダメな自分の育て方―性格タイプの「劣等機能」から理解するニガテ克服術
ppillc
0
150
防災デジタル分野での官民共創の取り組み (1)防災DX官民共創をどう進めるか
ditccsugii
0
660
コミュニティサイエンスの実践@日本認知科学会2025
hayataka88
0
170
Kaggle: NeurIPS - Open Polymer Prediction 2025 コンペ 反省会
calpis10000
0
580
Understanding CVP Waveforms: Interpretation and Clinical Implications in Anesthesiology
taka88
0
570
データベース01: データベースを使わない世界
trycycle
PRO
1
1.3k
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Building the Perfect Custom Keyboard
takai
2
790
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Designing Experiences People Love
moore
143
24k
Are puppies a ranking factor?
jonoalderson
1
3.5k
From π to Pie charts
rasagy
0
200
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
320
Designing for humans not robots
tammielis
254
26k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
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