progs/fun/fun_llvm.sc
changeset 977 1e6eca42d90b
parent 961 c0600f8b6427
equal deleted inserted replaced
976:e9eac62928f5 977:1e6eca42d90b
     1 // A Small LLVM Compiler for a Simple Functional Language
     1 // A Small LLVM Compiler for a Simple Functional Language
     2 // (includes an external lexer and parser)
     2 // (includes a lexer and parser)
     3 //
     3 //
     4 //
     4 //
     5 // call with 
     5 // call with 
     6 //
     6 //
     7 //     amm fun_llvm.sc main fact.fun
     7 //     amm fun_llvm.sc main fact.fun
    39 //    llc -filetype=obj in_file.ll
    39 //    llc -filetype=obj in_file.ll
    40 //    gcc in_file.o -o a.out
    40 //    gcc in_file.o -o a.out
    41 //    ./a.out
    41 //    ./a.out
    42 
    42 
    43 
    43 
    44 //> using toolkit 0.5.0
    44 // > using toolkit 0.5.0
    45 // > using file fun_tokens.scala
    45 // > using file fun_tokens.scala
    46 // > using file fun_parser.scala
    46 // > using file fun_parser.scala
    47 
    47 
    48 //import $file.fun_tokens, fun_tokens._
    48 import $file.fun_tokens, fun_tokens._
    49 //import $file.fun_parser, fun_parser._ 
    49 import $file.fun_parser, fun_parser._ 
    50 
    50 
    51 
    51 
    52 // for generating new labels
    52 // for generating new labels
    53 var counter = -1
    53 var counter = -1
    54 
    54 
   141     CPS(e)(y => KLet(z, KWrite(y), k(KVar(z))))
   141     CPS(e)(y => KLet(z, KWrite(y), k(KVar(z))))
   142   }
   142   }
   143 }   
   143 }   
   144 
   144 
   145 //initial continuation
   145 //initial continuation
   146 def CPSi(e: Exp) = CPS(e)(KReturn)
   146 def CPSi(e: Exp) = CPS(e)(KReturn(_))
   147 
   147 
   148 
   148 
   149 
   149 
   150 //some testcases:
   150 //some testcases:
   151 // (1 + 2) * 3
   151 // (1 + 2) * 3