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
「遂行理論の未来」(松島斉教授最終講義記念セッションの発表資料)
shunyanoda
0
930
人生を変えた一冊「独学大全」のはなし / Self-study ENCYCLOPEDIA: The Book Which Change My Life #独学大全 #EM推し本
expajp
0
170
YouTubeにおける撤回論文の参照実態 / metascience-meetup2026
corgies
3
300
機械学習 - K近傍法 & 機械学習のお作法
trycycle
PRO
1
1.6k
20260220 OpenIDファウンデーション・ジャパン ご紹介 / 20260220 OpenID Foundation Japan Intro
oidfj
0
370
AIを用いた PID制御で部屋 の温度制御をしてみた
nearme_tech
PRO
0
180
チュートリアル:世界モデル
hf149
0
1.9k
(メタ)科学コミュニケーターからみたAI for Scienceの同床異夢
rmaruy
0
260
機械学習 - SVM
trycycle
PRO
2
1.2k
東北地方における過去20年間の降水量の変化
naokimuroki
1
340
(2025) Balade en cyclotomie
mansuy
0
640
1. CPC理論の展開と集合的知能モデル(JSAI2026 KS-27 集合的予測符号化と新たな知性の時代)
hayashiyus884
1
300
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Fireside Chat
paigeccino
42
4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Marketing to machines
jonoalderson
1
5.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Google's AI Overviews - The New Search
badams
0
1.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
My Coaching Mixtape
mlcsv
0
170
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