+ All Categories
Home > Technology > Code Transformation by Direct Transformation of ASTs

Code Transformation by Direct Transformation of ASTs

Date post: 13-Apr-2017
Category:
Upload: esug
View: 499 times
Download: 0 times
Share this document with a friend
17
Code Transformation by Direct Transformation of ASTs M. Rizun, J.-C. Bach, S. Ducasse 1
Transcript
Page 1: Code Transformation by Direct Transformation of ASTs

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

1

Page 2: Code Transformation by Direct Transformation of ASTs

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

2

transformation

Page 3: Code Transformation by Direct Transformation of ASTs

Manual 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)

3

Page 4: Code Transformation by Direct Transformation of ASTs

Find & Replace

“…code…”

x >= y

ifTrue: [ x ]

ifFalse: [ y ]

“…code…”

“…code…”

x max: y

“…code…”

4

Right-Hand Side part Left-Hand Side part

Page 5: Code Transformation by Direct Transformation of ASTs

Problems

Time-consuming and annoying task.

Complex and error-prone process.

Rules are not reusable.

5

Page 6: Code Transformation by Direct Transformation of ASTs

Tools to automate process

Tool Create transformation rules.

Apply rules on desired environment scope.

Save rules for later reuse.

6

Page 7: Code Transformation by Direct Transformation of ASTs

Rewrite Engine

Engine for code transformation

Unintuitive syntax & no GUI

to apply rules

Pros

Cons

7

Page 8: Code Transformation by Direct Transformation of ASTs

“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 ]

8

Page 9: Code Transformation by Direct Transformation of ASTs

Inattention causes impactful mistakes!

`.InitializationStatement `InitializationStatement

9

Page 10: Code Transformation by Direct Transformation of ASTs

10

How to apply rules?

Page 11: Code Transformation by Direct Transformation of ASTs

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

11

Page 12: Code Transformation by Direct Transformation of ASTs

Rewrite Tool

´  Intuitive GUI

´  Real time result

´  Apply rules to any scope you want

´  Save rules for later reuse

12

Page 13: Code Transformation by Direct Transformation of ASTs

A.  Input code B.  Resulting code C.  LHS part of rule D.  RHS part of rule

13

Page 14: Code Transformation by Direct Transformation of ASTs
Page 15: Code Transformation by Direct Transformation of ASTs

15

Live Demo

Page 16: Code Transformation by Direct Transformation of ASTs

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

Page 17: Code Transformation by Direct Transformation of ASTs

Mark Rizun e-mail: [email protected] blog: http://myfuncoding.blogspot.com/

17


Recommended