The left window shows the parse tree for the current program, the middle window shows
the pretty-printed WSL code and the right window shows the transformation catalogue.
A statement or expression can be selected by clicking in the left or middle window,
and a transformation applied to the selected statement by clicking in the right window.

The FermaT Program Transformation System

The FermaT Transformation System is a powerful industrial-strength
program transformation system based on the WSL language.

FermaT has been used sucessfully in several major assembler to C
and assembler to COBOL migration projects involving the conversion of
millions of lines of hand-written assembler code to efficient and
maintainable C or COBOL code.

Requirements

Perl 5.6.1 or later. The command "perl -v"
will tell you which version of perl you have.

Bit::Vector,
a perl module for efficient sets of integers (by Steffen Beyer). This is included in recent releases
of ActivePerl, and the 32 bit Intel Linux version of this module is now included in the distribution.

Set::IntRange,
a perl module (based on Bit::Vector) for sets of integers in a given range (also by Steffen Beyer).
This is a pure perl module, a copy of which is included in the distribution.

To install perl and the modules from ActiveState and the MinGW (Minimalist GNU for Windows)
version of gcc:

Download a recent version of perl from
http://www.activestate.com/ActivePerl/
and double click on it to install perl. (This should include the module Bit::Vector, and Set:ÏntRange is now
included in the distribution).

Download the current version of
the automated MinGW Installer
from http://www.mingw.org/
and double click on it to install gcc.. Note: there are some problems with the MinGW versions of gcc.
The file maths2-2.scx.c will not compile with version 2.95 of gcc, while scm.c does not compile prooerly with later versions.
A workaround is to compile scm.c with gcc version 2.95 and compile the rest of the files with gcc version 3 or 4.
This will be handled automatically by the make-fermat script, provided both versions of MinGW gcc are installed.
Download gcc-2.95.3 from the
MinGW download site.
Unpack the tar.gz file in your MinGW directory. This will install as gcc-2.exe, which will be detected and used
to compile scm.c.

NOTE that all upper case letters in WSL symbols must be preceded
with a slash (/) and there must be an initial slash added
to convert a WSL symbol to the equivalent Scheme symbol.
This is because Scheme is case-insensitive and also because
we want to avoid clashes between WSL symbols and Scheme symbols.

News

17th December 2001: This release includes perl modules for fast computation
of immediate dominators, control dependencies and Static Single Assignment form.
It also includes new transformations for computing SSA form and for forwards
and backwards slicing of WSL using dataflow analysis.

20th December 2001: Added Rename_Defns transformation and improved the slicer.

2nd January 2002: Updated to the latest version of SCM (scm5d4) and removed
non-essential Scheme files from the distribution.

11th March 2002: FermaT now builds on Windows platforms
as well as Linux, Solaris and other Unix platforms.
You need a recent version of perl plus the GNU C compiler.
See the Windows Installation Instructions below for details.

25th November 2002: FermaT can now be installed in a path with spaces in it.
The environment variables are no longer required, provided you pass the apprporiate
options to the scripts (see the Makefile for the required options).

30th June 2003: Added @Transitive_Closure function to utility.wsl

8th March 2004: This release includes a new function @WP(P, R) which takes a WSL program P
and condition R and returns a WSL condition equivalent to the weakest precondition of P on R.
Note: @WP is not defined for programs which contain loops of recursion since the weakest precondition
for such programs is infinitely long. This release also extends the simplifier with some
computationally intensive simplifications for simplifying weakest preconditions. Call @Simplify directly
with a budget larger than 12 to invoke these simplifications (@WP itself calls @Simplify with a budget of 20).

15th August 2007: This release adds several new transformations including Semantic_Slice,
as described in the paper: Slicing as a Program Transformation
(ACM Transactions on Programming Languages and Systems, Vol 29, Issue 2, March 2007).