Slide 1

Slide 1 text

MODELING ASTS WITH FAST Yuriy “Uko” Tymchuk

Slide 2

Slide 2 text

MOOSE

Slide 3

Slide 3 text

FAMIX

Slide 4

Slide 4 text

FAMIX

Slide 5

Slide 5 text

FAMIX Access Invocation

Slide 6

Slide 6 text

PROBLEM? • Calculating metrics • Rule checking • Detecting duplication • Representing (eg. visualizing) • Language conversions • And more…

Slide 7

Slide 7 text

can’t handle that! AST FAMIX we need

Slide 8

Slide 8 text

FAST

Slide 9

Slide 9 text

FAST 0% 25% 50% 75% 100% Smalltalk Java

Slide 10

Slide 10 text

FAST

Slide 11

Slide 11 text

FAST IMPORTERS PetitParser

Slide 12

Slide 12 text

MODEL

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

RB CASCADE DESIGN Cascade Message1 arguments… Message2 arguments… Message3 arguments… RECEIVER

Slide 16

Slide 16 text

FAST CASCADE DESIGN Cascade RECEIVER Message1 arguments… Message2 arguments… Message3 arguments…

Slide 17

Slide 17 text

SMALLTALK / JAVA COMPARISON 0 8 15 23 30 Statements Expression Smalltalk Java

Slide 18

Slide 18 text

http://uko-on-code.blogspot.com

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

FAST ANALYSES

Slide 21

Slide 21 text

SYMBOL RESOLUTION #middleOf:and: b a sum ^st st := sum + a b / sum 2 middleOf: a and: b | sum | sum := a + b. ^ sum / 2

Slide 22

Slide 22 text

SYMBOL RESOLUTION b a sum #middleOf:and: b a sum ^st st := sum + a b / sum 2

Slide 23

Slide 23 text

SYMBOL RESOLUTION b a sum #middleOf:and: b a sum ^st st := sum + a b / sum 2

Slide 24

Slide 24 text

RESOLVING SYMBOLS Scope • name-variable dictionary • parent scope • owner entity Scope • name-variable dictionary • parent scope • owner entity

Slide 25

Slide 25 text

CALCULATING METRICS • nodes of a Kind • cyclomatic complexity Amount of something in code

Slide 26

Slide 26 text

CALCULATING METRICS collection inject: initial into: [block] CollectorVisitor newWithSeed: initial andBlock: [block]

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

FAST CONTRIBUTION http://smalltalkhub.com/#!/~YuriyTymchuk/FAST https://github.com/Uko/FAST https://ci.inria.fr/moose/job/FAST-On-Moose

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

THANKS Stéphane Ducasse Nicolas Anquetil RMoD team

Slide 31

Slide 31 text

FAST