code transformation by direct transformation of asts

Post on 18-Aug-2015

178 Views

Category:

Science

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Code Transformation by Direct Transformation of ASTsM. Rizun, J.-C. Bach, S. Ducasse

2 Example of simple code transformation

foo

| result a b |

a := 2.

b := 3.

result := a >= b

ifTrue: [ a ]

ifFalse: [ b ]

foo

| result a b |

a := 2.

b := 3.

result := a max: b

Source code Resulting code

transformation

3Manual code transformation process

(in big system)

Replace all found occurrences by target code.

Search for all occurrences of the code to replace in the source code.

Definition of the desired target code. (RHS)

Definition of the code to change. (LHS)

4 Find & Replace

“…code…”

x >= y

ifTrue: [ x ]

ifFalse: [ y ]

“…code…”

“…code…”

x max: y

“…code…”

Right-Hand Side partLeft-Hand Side part

5 Problems

Time-consuming and annoying task.

Complex and error-prone process.

Rules are not reusable.

6 Tools to automate process

Tool Create transformation rules.

Apply rules on desired environment scope.

Save rules for later reuse.

7 Rewrite Engine

Engine for code transformation

Unintuitive syntax & no GUI to apply

rules

Pros

Cons

8 “Scary” transformation rule

Left-Hand Side part

| `@temporaries |

`.InitializationStatement.

`@condition1

ifTrue: [

| `@otherTemporaries |

`@.Statements.

`@condition2

ifTrue: [ ``@value := ``@calculate ]

ifFalse: [ ``@value := `#wrongLiteral ] ]

Right-Hand Side part

| `@temporaries `@otherTemporaries |

`.InitializationStatement.

`@condition1

ifFalse: [ ^self ].

`@.Statements.

``@value := `@condition2

ifTrue: [ ``@calculate ]

ifFalse: [ `#wrongLiteral ]

9 Inattention causes impactful mistakes!

`.InitializationStateme

nt

`InitializationStateme

nt

10

How to apply rules?

11

OR

| rule result aCollection anEnvironment |

aCollection := self environment.

anEnvironment := RBClassEnvironment

classes: aCollection.

rule := (Smalltalk globals at: self rules selectedItem) new.

result := RBSmalllintChecker

runRule: rule

onEnvironment: anEnvironment.

(ChangesBrowser changes: result builder changes) open

12 Rewrite Tool

Intuitive GUI

Real time result

Apply rules to any scope you want

Save rules for later reuse

13

A B

C D

A. Input codeB. Resulting codeC. LHS part of ruleD. RHS part of rule

15

Live Demo

16 Download & Info

http://smalltalkhub.com/#!/~MarkRizun/RewriteTool

Configuration Browser (Pharo4)

http://myfuncoding.com

Pharo For The Enterprise (RewriteTool chapter)https://github.com/SquareBracketAssociates/PharoForTheEnterprise-english/tree/master/RewriteTool

17

Mark Rizun e-mail: mrizun@gmail.com blog: http://myfuncoding.blogspot.com/

top related