Giter Site home page Giter Site logo

vitaly-z / the-super-tiny-interpreter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from keyz/the-super-tiny-interpreter

0.0 0.0 0.0 39 KB

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

Home Page: https://tonicdev.com/npm/the-super-tiny-interpreter

License: MIT License

JavaScript 100.00%

the-super-tiny-interpreter's Introduction

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
  • Notice that we didn't implement the traditional function syntax. Arrow functions FTW!
(x) => x + 1

(x) => {
  const y = x + 100;
  return y * y;
}
  1. Call Expression
foo(1, 2, 3)
  1. Variable Declaration Statement
  • Notice that we only support const for now and there's NO mutation (assignment) in our language.
    • That means we can initialize stuff once and only once
    • And of course const foo; is not valid JavaScript
  • If you are familiar with Scheme/OCaml, then const LHS = RHS behaves just like a letrec.
const foo = 12;

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

the-super-tiny-interpreter's People

Contributors

keyz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.