Skip to content
😎 A curated list of awesome resources on the theory and construction of Compilers, Interpreters and Runtimes.
Branch: master
Clone or download
Pull request Compare This branch is 137 commits behind aalhour:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
CONTRIBUTING.md
README.md

README.md

Awesome Compilers Awesome

A curated list of awesome resources, learning materials, tools, frameworks, platforms, technologies and source code projects in the field of Compilers, Interpreters and Runtimes. This list has a bias towards education.

Table of Contents


Learning

Books

Papers

Researchers and Institutes

Specifications

Courses

Talks

Articles

Tutorials

Community Discussions

Projects

This section aims at listing code projects of Compilers, Interpreters, Translators, Runtimes, Virtual Machines and the like.

Production-Ready

Educational and Toys

  • C4 - C Lang in 4 Functions.
    • Discussions: HN.
  • CarpVM - An experimental VM implementation in C.
  • Gecho - A simple-stack language implementation in C.
  • Hython - A Haskell-powered Python 3 interpreter.
  • MetaScala - A Metacircular JVM implementation in Scala.
  • Poprc - A compiler for the Popr Language.
  • PyCOOLC - A compiler for the COOL Programming Language written in Python 3.
  • RabbitVM - A RISC-based VM implementation in C.
  • stack_cpu - A Stack-machine simulator.
  • The Super Tiny Compiler - A tiny educational compiler project in JavaScript.
    • Discussions: HN.
  • tinyc.c - A Tiny-C language compiler in C.

Tools and Frameworks

Language Agnostic

  • B3: The Bare Bones Backend - WebKit's optimizing JIT Compiler for procedures containing C-like code.
  • LLILCL - An LLVM-based Compiler Backend for .NET Core.
  • LLVM - The LLVM Compiler-Backend Framework.
  • MicroVM - The "Mu" Framewrok for Programming Languages development based on the MuVM Specification.
  • Movfuscator Compiler - The M/o/Vfuscator compiles programs into "mov" instructions, and only "mov" instructions.
  • QBE: The Quick Backend - A pure C embeddable SSA-based compiler backend.
  • Summus - A (reusable) basic compiler frontend implementation using LLVM as a backend.

C (as a Backend)

  • GCC - The GNU Compiler Collection.
  • libFirm - A C library that provides a graph-based intermediate representation, optimizations, and assembly code generation suitable for use in compilers.
  • libJIT - A library that provides generic Just-In-Time compiler functionality independent of any particular bytecode, language, or runtime.
  • myJIT - A library for machine-code generation and execution at run-time.
  • PCC - The Portable C Compiler.
  • TCC - The Tiny C Compiler.

CLR

  • Cecile - A library to generate and inspect programs and libraries in the ECMA CIL format.
  • ILSpy - A .NET Decompiler.
  • Reflector - A .NET Decompiler.
  • Reflexil - An an assembly editor which can be used as a plugin with other .NET/CLR tools.

D

  • dunnart - LALR(1) Parser Generator.
  • FancyPars-lite - A fast parser generator.
  • libdparse - A library allowing to build lexers and parsers. Contains a lexer and a parser for the D language itself.
  • llvm-d - D bindings for LLVM.
  • Pegged - design, test and generate parsers for PEG grammars.

Graal

  • Graal - High-Performance Polyglot Runtime.
  • Graal Core - Compiler and Truffel Partial Evaluator.
  • Graal VM - Graal's multi-language VM distribution.

JavaScript

  • Babel.js - Next-generation JavaScript Compiler.
  • IRHudra - A tool for displaying intermediate representations used by V8 and Dart VM optimizing compilers.
  • JISON - A context-free grammar parser generator for JavaScript.
  • PEG.js - A simple parser generator for JavaScript.

JVM

  • ANTLR - A parser generator for reading, processing, executing, or translating structured text or binary files.
  • BYAAC/J - BYACC/Java is an extension of the Berkeley v 1.8 YACC-compatible parser generator for Java.
  • JavaCC - Java Compiler Construction and Parser Generator Toolkit.
  • JFlex - JFlex is a lexical analyzer generator for Java with full Unicode support.
  • JLex - JLex is a lexical analyzer generator, that can be used in combination with CUP.

Kotlin

Python

  • AST - Python's builtin Abstract Syntax Tree package.
  • Dis - Python's builtin Disassembler package.
  • Parsing - A pure-Python module that implements an LR(1) parser generator, as well as CFSM and GLR parser drivers.
  • PLY - An implementation of lex and yacc parsing tools for Python.
  • PyParsing - An alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions.
  • RPLY - A port of the PLY project to RPython.
  • RPython - RPython is a framework for the implementatation of dynamic languages.

Lists of Python Parsing Tools

Rust

  • Combine - Parser Combinator Library for Rust.
  • IronLLVM - Safe LLVM bindings for Rust.
  • LALRPOP - LR(1) parser generator for Rust.
  • Nom - Parser Combinator Framework.
  • PEG - A PEG Parser Generator.
  • Pest - A PEG Parser Generator.
  • RLS - The Rust Language Server implementation (aka RLS).

Runtimes and VMs

Verticals

Communities

  • /r/Compilers - A subreddit community about the theory and development of compilers.
  • /r/ProgrammingLanguages - A subreddit community that is dedicated to discussion of programming languages, programming language theory, design, their syntax and compilers.

License

CC0

To the extent possible under law, Ahmad Alhour has waived all copyright and related or neighboring rights to this work.

You can’t perform that action at this time.