+ All Categories
Home > Documents > Modeling ASTs with FAST (mooseday13)

Modeling ASTs with FAST (mooseday13)

Date post: 19-Jul-2015
Category:
Upload: yuriy-tymchuk
View: 253 times
Download: 0 times
Share this document with a friend
Popular Tags:
47
MODELING ASTS WITH FAST Yuriy “Uko” Tymchuk
Transcript

MODELING ASTS WITH FASTYuriy “Uko” Tymchuk

MOOSE

FAMIX

FAMIX

FAMIX

FAMIX

FAMIX

Access

Invocation

PROBLEM?

PROBLEM?

• Calculating metrics

• Rule checking

• Detecting duplication

• Representing (eg. visualizing)

• Language conversions

• And more…

can’t handle that!

AST

FAMIX

we need

FASTASTF

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 : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

GENERAL FAST DIAGRAM

FASTBehaviouralEntity

0..*

statements

0..1

parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

GENERAL FAST DIAGRAM

FASTBehaviouralEntity

0..*

statements

0..1

parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

GENERAL FAST DIAGRAM

FASTBehaviouralEntity

0..*

statements

0..1

parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

FASTBehaviouralEntity

0..*

statements

0..1

parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

GENERAL FAST DIAGRAM

FASTBehaviouralEntity

0..*

statements

0..1

parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

FAMIXBehaviouralEntity0..1

fastNamedBehaviouralEntity

0..1

famixBehaviouralEntity

FAMIXNamedEntity0..*

fastNamedEntities

0..1

famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity

0..1parentExpression**

0..1parentStatement**

FASTStatementBlock

0..1parentBehaviouralEntity

0..1

statementBlockFASTVariableExpression

0..1parentVariableExpression

0..1

variable

FASTLiteral

signature : string

GENERAL FAST DIAGRAM

SMALLTALK FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTVariableExpression FASTLiteral

signature : String

FASTMessageSend

kindselector

isUnary()isBinary()isKey()cascaded()receiver()

FASTStatement

0..1parentExpression

0..*arguments

FASTAssignmentExpression

0..1parentAssignmentExpression

0..1variable

FASTExpression

0..1parentStatement 0..1

expression

FASTArrayExpression FASTCascade

0..1parentCascade

0..*messages

0..1

parentExpression

0..1

concreteReceiver

0..1parentExpression

0..1block

FASTSmalltalkReturnStatement

FASTSmalltalkExpressionStatement

0..1parentStatement 0..1

expression

0..1parentExpression

0..1

expression

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

0..1parentVariableExpression

0..1variable

FASTBlockDefinition

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTNumberLiteral

value : Number

FASTCharacterLiteral

value : Object

FASTStringLiteral

value : String

FASTSymbolLiteral

value : Object

FASTArrayLiteral FASTByteArrayLiteral

0..*contents

0..*contents

FASTBlockExpression

0..1parentExpression

0..*contents

FASTBooleanLiteral

value : Boolean

FASTUndefinedLiteral

0..1parentExpression

0..1receiver

0..1parentBehaviouralEntity

FAMIXInvocation

0..1messageSend

0..1invocation

FASTStatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

SMALLTALK FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTVariableExpression FASTLiteral

signature : String

FASTMessageSend

kindselector

isUnary()isBinary()isKey()cascaded()receiver()

FASTStatement

0..1parentExpression

0..*arguments

FASTAssignmentExpression

0..1parentAssignmentExpression

0..1variable

FASTExpression

0..1parentStatement 0..1

expression

FASTArrayExpression FASTCascade

0..1parentCascade

0..*messages

0..1

parentExpression

0..1

concreteReceiver

0..1parentExpression

0..1block

FASTSmalltalkReturnStatement

FASTSmalltalkExpressionStatement

0..1parentStatement 0..1

expression

0..1parentExpression

0..1

expression

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

0..1parentVariableExpression

0..1variable

FASTBlockDefinition

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTNumberLiteral

value : Number

FASTCharacterLiteral

value : Object

FASTStringLiteral

value : String

FASTSymbolLiteral

value : Object

FASTArrayLiteral FASTByteArrayLiteral

0..*contents

0..*contents

FASTBlockExpression

0..1parentExpression

0..*contents

FASTBooleanLiteral

value : Boolean

FASTUndefinedLiteral

0..1parentExpression

0..1receiver

0..1parentBehaviouralEntity

FAMIXInvocation

0..1messageSend

0..1invocation

FASTStatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

SMALLTALK FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTVariableExpression FASTLiteral

signature : String

FASTMessageSend

kindselector

isUnary()isBinary()isKey()cascaded()receiver()

FASTStatement

0..1parentExpression

0..*arguments

FASTAssignmentExpression

0..1parentAssignmentExpression

0..1variable

FASTExpression

0..1parentStatement 0..1

expression

FASTArrayExpression FASTCascade

0..1parentCascade

0..*messages

0..1

parentExpression

0..1

concreteReceiver

0..1parentExpression

0..1block

FASTSmalltalkReturnStatement

FASTSmalltalkExpressionStatement

0..1parentStatement 0..1

expression

0..1parentExpression

0..1

expression

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

0..1parentVariableExpression

0..1variable

FASTBlockDefinition

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTNumberLiteral

value : Number

FASTCharacterLiteral

value : Object

FASTStringLiteral

value : String

FASTSymbolLiteral

value : Object

FASTArrayLiteral FASTByteArrayLiteral

0..*contents

0..*contents

FASTBlockExpression

0..1parentExpression

0..*contents

FASTBooleanLiteral

value : Boolean

FASTUndefinedLiteral

0..1parentExpression

0..1receiver

0..1parentBehaviouralEntity

FAMIXInvocation

0..1messageSend

0..1invocation

FASTStatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

SMALLTALK FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTVariableExpression FASTLiteral

signature : String

FASTMessageSend

kindselector

isUnary()isBinary()isKey()cascaded()receiver()

FASTStatement

0..1parentExpression

0..*arguments

FASTAssignmentExpression

0..1parentAssignmentExpression

0..1variable

FASTExpression

0..1parentStatement 0..1

expression

FASTArrayExpression FASTCascade

0..1parentCascade

0..*messages

0..1

parentExpression

0..1

concreteReceiver

0..1parentExpression

0..1block

FASTSmalltalkReturnStatement

FASTSmalltalkExpressionStatement

0..1parentStatement 0..1

expression

0..1parentExpression

0..1

expression

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

0..1parentVariableExpression

0..1variable

FASTBlockDefinition

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTNumberLiteral

value : Number

FASTCharacterLiteral

value : Object

FASTStringLiteral

value : String

FASTSymbolLiteral

value : Object

FASTArrayLiteral FASTByteArrayLiteral

0..*contents

0..*contents

FASTBlockExpression

0..1parentExpression

0..*contents

FASTBooleanLiteral

value : Boolean

FASTUndefinedLiteral

0..1parentExpression

0..1receiver

0..1parentBehaviouralEntity

FAMIXInvocation

0..1messageSend

0..1invocation

FASTStatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

SMALLTALK FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTVariableExpression FASTLiteral

signature : String

FASTMessageSend

kindselector

isUnary()isBinary()isKey()cascaded()receiver()

FASTStatement

0..1parentExpression

0..*arguments

FASTAssignmentExpression

0..1parentAssignmentExpression

0..1variable

FASTExpression

0..1parentStatement 0..1

expression

FASTArrayExpression FASTCascade

0..1parentCascade

0..*messages

0..1

parentExpression

0..1

concreteReceiver

0..1parentExpression

0..1block

FASTSmalltalkReturnStatement

FASTSmalltalkExpressionStatement

0..1parentStatement 0..1

expression

0..1parentExpression

0..1

expression

FASTNamedEntity

name : String0..*

parameters

0..*localVariables

0..1parentVariableExpression

0..1variable

FASTBlockDefinition

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTNumberLiteral

value : Number

FASTCharacterLiteral

value : Object

FASTStringLiteral

value : String

FASTSymbolLiteral

value : Object

FASTArrayLiteral FASTByteArrayLiteral

0..*contents

0..*contents

FASTBlockExpression

0..1parentExpression

0..*contents

FASTBooleanLiteral

value : Boolean

FASTUndefinedLiteral

0..1parentExpression

0..1receiver

0..1parentBehaviouralEntity

FAMIXInvocation

0..1messageSend

0..1invocation

FASTStatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

RB CASCADE DESIGN

Cascade

Message1 arguments…

Message2 arguments…

Message3 arguments…

RECEIVER

FAST CASCADE DESIGN

CascadeRECEIVER

Message1 arguments…

Message2 arguments…

Message3 arguments…

SMALLTALK / JAVA COMPARISON

0

8

15

23

30

StatementsExpression

Smalltalk Java

JAVA FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*parameters

0..*localVariables

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity StatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

FASTVariableExpression0..1parentVariableExpression

0..1variable

FASTLiteral

signature : string

FASTJavaExpressionStatement

FASTJavaReturnStatement

0..1parentStatement

0..1expression

0..1parentStatement

0..1expression

FASTWhileStatement

0..1parentStatement

0..1condition

0..1parentStatement

0..1body

FASTVariableDeclarationStatement

FASTVariableDeclarator0..1parentStatement

0..*

declarators0..1variable

0..1

initializer

FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral

FASTInfixOperation 0..1parentExpression

0..1leftOperand

0..1parentExpression

0..1rightOperand

JAVA FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*parameters

0..*localVariables

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity StatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

FASTVariableExpression0..1parentVariableExpression

0..1variable

FASTLiteral

signature : string

FASTJavaExpressionStatement

FASTJavaReturnStatement

0..1parentStatement

0..1expression

0..1parentStatement

0..1expression

FASTWhileStatement

0..1parentStatement

0..1condition

0..1parentStatement

0..1body

FASTVariableDeclarationStatement

FASTVariableDeclarator0..1parentStatement

0..*

declarators0..1variable

0..1

initializer

FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral

FASTInfixOperation 0..1parentExpression

0..1leftOperand

0..1parentExpression

0..1rightOperand

JAVA FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*parameters

0..*localVariables

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity StatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

FASTVariableExpression0..1parentVariableExpression

0..1variable

FASTLiteral

signature : string

FASTJavaExpressionStatement

FASTJavaReturnStatement

0..1parentStatement

0..1expression

0..1parentStatement

0..1expression

FASTWhileStatement

0..1parentStatement

0..1condition

0..1parentStatement

0..1body

FASTVariableDeclarationStatement

FASTVariableDeclarator0..1parentStatement

0..*

declarators0..1variable

0..1

initializer

FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral

FASTInfixOperation 0..1parentExpression

0..1leftOperand

0..1parentExpression

0..1rightOperand

JAVA FAST DIAGRAM

FASTBehaviouralEntity

0..*statements

0..1parentStatementBlock

FASTStatement

FASTNamedEntity

name : String0..*parameters

0..*localVariables

FAMIXBehaviouralEntity

0..1fastNamedBehaviouralEntity

0..1famixBehaviouralEntity

FAMIXNamedEntity

0..*fastNamedEntities

0..1famixNamedEntity

FASTNamedBehaviouralEntity

name : String

FASTExpression

0..1parentBehaviouralEntity StatementBlock

0..1parentBehaviouralEntity

0..1statementBlock

FASTVariableExpression0..1parentVariableExpression

0..1variable

FASTLiteral

signature : string

FASTJavaExpressionStatement

FASTJavaReturnStatement

0..1parentStatement

0..1expression

0..1parentStatement

0..1expression

FASTWhileStatement

0..1parentStatement

0..1condition

0..1parentStatement

0..1body

FASTVariableDeclarationStatement

FASTVariableDeclarator0..1parentStatement

0..*

declarators0..1variable

0..1

initializer

FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral

FASTInfixOperation 0..1parentExpression

0..1leftOperand

0..1parentExpression

0..1rightOperand

DEMO

FAST ANALYSES

SYMBOL RESOLUTION

#middleOf:and:b

a

sum^stst

:=

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^stst

:=

sum +

a b

/

sum 2

RESOLVING SYMBOLS

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

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 GSOC

FAST Java Model Tree models visualizationThe idea behind this project is to d e ve l o p a n i n t e r a c t i v e t r e e visualization that wil l gradually improve analysis of the underlying model.

The goal of this project is to create a Java version of FAST.

FAST


Recommended