Home

Awesome

The Super Tiny Interpreter

build status test coverage

Let's explain what a closure is by writing a JavaScript interpreter in JavaScript.

Try it here: https://tonicdev.com/npm/the-super-tiny-interpreter

This project is still a work in progress, but feel free to poke around and check out the unit tests.

Disclaimer

The goal of this project is not to make a spec-compliant or blazing-fast interpreter. The goal, however, is to interpret a tiny subset of JavaScript features in super-easy-to-readâ„¢ code.

Supported Syntax

  1. Numbers, Booleans, null, and undefined
12 // Numeric Literal
true // Boolean Literal
null // Null Literal
undefined // Do you know that `undefined` is actually an identifier? Paul Irish calls shadowing it the "Asshole Effect".
  1. Variable, a.k.a. Identifier
foo
  1. Binary Operators
+, -, *, /, ==, ===, !=, !==, <, <=, >, >=
  1. Unary Operators
!, -
  1. Conditional Expression, a.k.a. the ternary operator
test ? consequent : alternate
  1. Arrow Function Expression
(x) => x + 1

(x) => {
  const y = x + 100;
  return y * y;
}
  1. Call Expression
foo(1, 2, 3)
  1. Variable Declaration Statement
const foo = 12;

const fact = (x) => x < 2 ? 1 : x * fact(x - 1);