FermaT Transformation System
From Wikipedia, the free encyclopedia
The FermaT Transformation System is a powerful industrial-strength program transformation system based on the WSL language.
FermaT has been used successfully in several major assembler to C migration projects: each project involved converting over half a million lines of hand-written assembler code to efficient and maintainable C code.
FermaT is available as free software under the GNU General Public License (GPL).
An example of a program transformation is Semantic Slicing. Consider the following WSL program:
total:= 0; i := 0; evens := 0; noevens := 0; odds := 0; noodds := 0; n := n0; WHILE i <= n DO evenflag := A[i] MOD 2; evenflag := 0; IF FALSE THEN evens := evens + A[i]; noevens := noevens + 1 ELSE odds := odds + A[i]; noodds := noodds + 1 FI; total := total + A[i]; i := i + 1 OD; IF noevens <> 0 THEN meaneven := evens/noevens ELSE meaneven := 0 FI; IF noodds <> 0 THEN meanodd := odds/noodds ELSE meanodd := 0 FI; mean := total/(n+1); evendifference := ABS(meaneven - mean); odddifference := ABS(meanodd-mean)
Suppose we are interested in the final value of the variable evendifference. Save the program as a text file test-1.wsl and run the transformation:
dotrans test-1.wsl test-2.wsl Semantic_Slice data=evendifference
This generates the output file test-2.wsl:
evendifference := ABS(REDUCE("+", A[0..n0]) / (n0 + 1))
See this paper for more information about semantic slicing.