laspa

Crates.iolaspa
lib.rslaspa
version0.3.0
sourcesrc
created_at2023-08-12 07:42:35.198524
updated_at2023-08-18 18:01:11.48996
descriptionA simple Lisp-like language built with Rust
homepage
repositoryhttps://github.com/manorajesh/laspa
max_upload_size
id942601
size4,106,028
mano (manorajesh)

documentation

README

läspa

Build Status codecov Downloads Version License

A toy language I designed to be as easy as possible to implement. Reminiscent of lisp, läspa uses Reverse Polish Notation for basic arithmetic and for function calls. With a basic interpreter implemented, I plan to implement a compiler with the help of LLVM and plain machine-code generation.

Installation

cargo install laspa

You will need the llvm toolchain to build the executable. Clang is also used for linking.

brew install llvm && export LLVM_SYS_160_PREFIX='/usr/local/opt/llvm@16'

Usage

See this test file for example syntax.

A simple Lisp-like language built with Rust

Usage: laspa [OPTIONS] <FILE>

Arguments:
  <FILE>  The file to build

Options:
  -O, --optimization-level <OPTIMIZATION_LEVEL>  Optimization level for the compiler [default: 1]
  -i, --interpret                                Interpret the file
  -v, --verbose...                               Verbose output
  -o, --executable-name <EXECUTABLE_NAME>        Executable name [default: main]
      --jit                                      Execute IR with JIT
  -h, --help                                     Print help (see more with '--help')
  -V, --version                                  Print version

Why

I was reading an article on the fastest implementation of a binary search algorithm. I saw llvm and thought to myself: "Hmm, wouldn't it be interesting to make a language." The rest is history.

Important Code

The lex, parse, and eval functions are the meat of the execution of the language. Those familiar with language development will recognize those names. llvm.rs is crucial to generating and compiling the IR for LLVM executations.

Commit count: 27

cargo fmt