Skip to content

About

CodeCrafters "Build your own interpreter" challenge in Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

"Build your own Interpreter" Challenge

progress-banner

This is a starting point for Rust solutions to the "Build your own Interpreter" Challenge.

This challenge follows the book Crafting Interpreters by Robert Nystrom.

In this challenge you'll build an interpreter for Lox, a simple scripting language. Along the way, you'll learn about tokenization, ASTs, tree-walk interpreters and more.

Before starting this challenge, make sure you've read the "Welcome" part of the book that contains these chapters:

These chapters don't involve writing code, so they won't be covered in this challenge. This challenge will start from chapter 4, Scanning.

Note: If you're viewing this repo on GitHub, head over to codecrafters.io to try the challenge.

Passing the first stage

The entry point for your program is in src/main.rs. Study and uncomment the relevant code, and then run the command below to execute the tests on our servers:

codecrafters submit

Time to move on to the next stage!

Stage 2 & beyond

Note: This section is for stages 2 and beyond.

  1. Ensure you have cargo (1.96) installed locally
  2. Run ./your_program.sh to run your program, which is implemented in src/main.rs. This command compiles your Rust project, so it might be slow the first time you run it. Subsequent runs will be fast.
  3. Run codecrafters submit to submit your solution to CodeCrafters. Test output will be streamed to your terminal.

Play with it

This Lox interpreter supports true interactive REPL: run cargo run -- repl and type in some Lox constructs and expressions.

ℹ️ Use rustup to install Rust, see instructions at Rust website

Extras

Some Lox extra features (suggested as Challenges in the book) are gated behind Cargo features, use can test them like this:

cargo run -F lambdas -- repl

> fun makeCounter() {
    var cnt = 0;
    return fun () {
      cnt = cnt + 1;
      print cnt;
    };
}
> var printCnt = makeCounter();
> printCnt();
1
> printCnt();
2
> printCnt();
3
>

Teaser

Demo

About

CodeCrafters "Build your own interpreter" challenge in Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages