Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 

An implementation of a type-preserving Compiler, derived from the paper

From System F to Typed Assembly Language by Morrisett, Walker, Crary, Glew

I was inspired to implement this paper while preparing for Papers We Love.

The implementation includes all passes described in the paper:

  • F ==> K (Typed CPS conversion)
  • K ==> C (Polymorphic closure conversion)
  • C ==> H (Hoisting, reuses the C language)
  • H ==> A (Allocation)
  • A ==> TAL (Code generation)

Each language (F, K, C, A, TAL) is defined in the corresponding source file. These implementations include the abstract syntax, small-step operational semantics, and type checker for the languages. The file Util.hs contains definitions common to all implementations.

The compiler itself is in the file translate.hs. To run the compiler, load this file into ghci and try out one of the sample programs from F.hs.

In particular, you can try

 Translate*> printM $ compile F.sixfact

to see the TAL output for the factorial function applied to six.

If you would like to compile and then run this function you can try:

 Translate*> test F.sixfact

About

An implementation of Typed Assembly Language (Morrisett, Walker, Crary, Glew)

Resources

License

Releases

No releases published

Packages

No packages published