Compilers, Typecheckers, and Parsers
Because OCaml is one of the best tools for creating compilers, typecheckers, etc, you’ll find a wide variety of projects made in OCaml.
Languages and Compilers:
- Reason: Friendly syntax & toolchain for OCaml allowing both compilation to javascript and native executables.
- Morbig: Parser for a POSIX-compliant shell.
- cDuce: a modern XML-oriented functional language with innovative features.
- Compcert C Compiler: C Compiler supporting most of the ISO C90 and C99 / ANSI C features.
- Eff Programming Language: functional language with typed handlers for exceptions as well as other computational effects such as state or I/O.
- Hack Programming Language
- Haxe Programming Language
- Mezzo Programming Language: a programming language in the ML tradition, which places strong emphasis on the control of aliasing and access to mutable memory.
- OCaml-Java: OCaml to Java bytecode compiler.
- Opa Programming Language
- Rhine: A Lisp on LLVM written in OCaml.
- tis-interpreter: An interpreter for finding subtle bugs in programs written in standard C
- Slipshow: A text-based tool for making presentations with scrolling as an alternative to traditional slides.
Parsers and Lexers
- Angstrom: Parser combinators targetted at fast protocols, built for speed and memory efficiency
- Sedlex: a modern, encoding-agnostic (read: Unicode-supporting) lexer generator.
- Menhir: An LR(1) parser generator for OCaml.
- Nice Parser:
Remove boilerplate from OCaml parser generators using
Menhir
andSedlex
. - ocamllex/ocamlyacc: lex and yacc C-based implementation for OCaml. Were the go-to solution for many years.
- Opal: Self-contained monadic parser combinators for OCaml.
- Obelisk: produce readable LaTeX, HTML, or plain-text EBNF-style documentation for your grammar.
Type Checkers
- Flow: A typechecker for Javascript written by Facebook.
- Pyre: A typechecker for Python written by Facebook.
Systems
- mpst: Multiparty Session Types. A communication library guaranteeing important properties.
Miscellaneous
Articles:
- Kaleidoscope: Implementing a Language with LLVM in Objective Caml (Since 13.0.0, LLVM started using C as the tutorial language)
- Bolt: Tutorial on implementing a language with OCaml as frontend