Murphy· Open-source project
Write a program in Murphy and run it. The scanner, the parser and the interpreter are all in one OCaml file.

Every language you use has a scanner, a parser and an interpreter behind it. Murphy is a small one, built to see all three parts at work with nothing doing the hard parts for me.
Customer: me. I wanted to understand what happens between typing code and seeing it run, so I wrote the whole chain.
The source is cut into tokens: numbers, names, symbols and the capitalised keywords FUNC, TEST, SUCCESS, FAIL, DEF and IN.
Tokens are arranged by the grammar into a syntax tree, so that 2 + 3 * 4 multiplies before it adds.
Plus ├ Num 2 └ Mul ├ Num 3 └ Num 414
The interpreter walks the tree with an environment of variables and functions. Functions are values, so one can be passed to another.
Plain OCaml. Compile it with ocamlc and run it.
A function can be passed as an argument and called inside another function.
Dividing by zero gives PLUS_INFINITY, MINUS_INFINITY or NAN instead of an error.
Write your program in a text file and pass it to the interpreter.
One OCaml file, about 760 lines. It works with integers only.