jaseemabid / Olifant

A simple programming language targeting LLVM

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Olifant Build Status Docker Repository on Quay

A simple functional language targeting LLVM, WIP βš™βš’

Project is setup with stack

$ git pull https://github.com/jaseemabid/Olifant && cd Olifant
$ stack setup && stack build

See the blog post Lessons learned building a toy compiler for a detailed introduction to the project.

The test coverage isn't great, but has a bunch of good code samples. They run pretty fast 🏎 too.

$ stack test

The README maybe sparse, but there is a lot of inline documentation πŸ“œ in the code; which can be read with Haddock.

$ stack haddock --no-haddock-deps --open

Olifant programs can be compiled to native binaries and executed in one step ⚑.

$ stack exec olifant <<< 'sum 4 5'
$ 9

This is NOT an interpreter, a machine native binary is produced and executed in one step 🎩.

$ file /tmp/cmd.exe
$ /tmp/cmd.exe: Mach-O 64-bit executable x86_64

There are some samples programs in the examples directory - these are real programs used by the test runner so if the tests are βœ…, these are guaranteed to work.

The intermediary forms can be exported with additional flags. For example, the output of the parser can be viewed with -p.

$ stack exec olifant -- -p <<< 'sum 4 5'
[ App (Ref
       {rname = "sum", ri = 0, rty = TInt :> (TInt :> TInt), rscope = Extern})
      [Lit (Number 4), Lit (Number 5)]
]

Similarly, Core is exported with -c and the intermediary LLVM IR is exported with -l.

The compiler accepts programs from stdin or takes a file as argument.

$ olifant -l examples/vars.ol
$ file vars.ll
vars.ll: ASCII text

Docker images are automatically built by quay.io as well as by Travis CI as part of automated testing. If you have trouble building the dependencies/libraries locally, try the container.

$ make container
$ docker run -it olifant/olifant

I would LOVE any code contributions. There is a milestone to track priority bugs and features if you are looking for some inspiration.

About

A simple programming language targeting LLVM

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Haskell 89.2%Language:Dockerfile 3.5%Language:Makefile 3.5%Language:LLVM 2.0%Language:C 1.4%Language:Emacs Lisp 0.4%