Code Transformation by Direct Transformation of ASTs 1 M. Rizun, - - PowerPoint PPT Presentation

code transformation by direct transformation of asts
SMART_READER_LITE
LIVE PREVIEW

Code Transformation by Direct Transformation of ASTs 1 M. Rizun, - - PowerPoint PPT Presentation

Code Transformation by Direct Transformation of ASTs 1 M. Rizun, J.-C. Bach, S. Ducasse Example of simple code transformation 2 Source code Resulting code foo foo | result a b | | result a b | a := 2. a := 2. b := 3. b := 3.


slide-1
SLIDE 1

Code Transformation by Direct Transformation of ASTs

  • M. Rizun, J.-C. Bach, S. Ducasse

1

slide-2
SLIDE 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

2

transformation

slide-3
SLIDE 3

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

slide-4
SLIDE 4

Find & Replace

“…code…” x >= y ifTrue: [ x ] ifFalse: [ y ] “…code…” “…code…” x max: y “…code…”

4 Right-Hand Side part Left-Hand Side part

slide-5
SLIDE 5

Problems

Time-consuming and annoying task. Complex and error-prone process. Rules are not reusable.

5

slide-6
SLIDE 6

Tools to automate process

Tool Create transformation rules. Apply rules on desired environment scope. Save rules for later reuse.

6

slide-7
SLIDE 7

Rewrite Engine

Engine for code transformation Unintuitive syntax & no GUI to apply rules

Pros Cons

7

slide-8
SLIDE 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 ]

8

slide-9
SLIDE 9

Inattention causes impactful mistakes!

`.InitializationStatement `InitializationStatement

9

slide-10
SLIDE 10

10

How to apply rules?

slide-11
SLIDE 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

  • nEnvironment: anEnvironment.

(ChangesBrowser changes: result builder changes) open

11

slide-12
SLIDE 12

Rewrite Tool

´ Intuitive GUI ´ Real time result ´ Apply rules to any scope you want ´ Save rules for later reuse 12

slide-13
SLIDE 13
  • A. Input code
  • B. Resulting code
  • C. LHS part of rule
  • D. RHS part of rule

13

slide-14
SLIDE 14
slide-15
SLIDE 15

15

Live Demo

slide-16
SLIDE 16

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

slide-17
SLIDE 17

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