package minicaml
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=1e15b97c814611675c66638f4d13ef92da42b83a986dbcd97f4ac325ac42169c
sha512=52e09178a6b92550a70caa9e0c292c40df02823223368911dc0fc748671dbe0a4164a597861046edd82ff9a71e45047de7619cabffb7210f79f6e90800b49cb1
Description
A simple, didactical, purely functional programming language written for the programming 2 course at the University of Pisa, extended with a simple parser made with Menhir and ocamllex
Published: 13 Dec 2019
README
minicaml
minicaml is a small, purely functional interpreted programming language with a didactical purpose. I wrote minicaml for the Programming 2 course at the University of Pisa, taught by Professors Gianluigi Ferrari and Francesca Levi. It is based on the teachers' minicaml, an evaluation example to show how interpreters work. It is an interpreted subset of Caml, with eager evaluation and only local (let-in
) declaration statements. I have added a simple parser and lexer made with menhir and ocamllex (learn more). I have also added a simple REPL that show each reduction step that is done in evaluating an expression. I'd like to implement a simple compiler and abstract machine for this project.
minicaml only implements basic data types (integers and booleans) and will never be a full programming language intended for real world usage. minicaml's only purpose is to help students get a grasp of how interpreters and programming languages work.
Features
Show the AST of each expression
Easily choose between eager or lazy evaluation in your local definitions and functions by specifying lazyness using the
let lazy
andlazyfun
statements.Only boolean, unit and integer types
Pretty color REPL showing every step made in evaluating a program
Only local declaration statements
Recursive functions and closures
ocamllex and menhir lexer and parser
Extendable with ease
Installation
I will release a binary file (no need to compile) in the near future. To install, you need to have opam
(OCaml's package manager) and a recent OCaml distribution installed on your system. rlwrap is suggested for a readline-like (bash-like) keyboard interface.
# clone the repository
git clone https://github.com/0x0f0f0f/minicaml
# cd into it
cd minicaml
# install dependencies
opam install dune menhir ANSITerminal
# compile
make
# run
make run
# rlwrap is suggested
rlwrap make run
# you can install minicaml with
make install
# run again
rlwrap minicaml
Usage
Run make run
to run a REPL. The REPL shows the AST equivalentof each submitted expression, and each reduction step in the evaluation is shown. It also signals syntactical and semantical errors.
Dependencies (6)
- cmdliner
- ppx_deriving
- menhir
- ANSITerminal
- ocaml
-
dune
>= "2.0"
Dev Dependencies
None
Used by
None
Conflicts
None