# Chimpanzee ## What is the Monkey language? The Monkey language is a language created by Thorsten Ball for his book [Writing an Interpreter in Go](https://interpreterbook.com/). It is a dynamically typed language with C-like syntax. It supports integers, booleans, strings, arrays, hashes, and functions. It also has first-class functions, closures, and lexical scope. ## Chimpazee Chimpazee is an implementation of the Monkey language in Rust. It is based on the books [Writing an Interpreter in Go](https://interpreterbook.com/) and [Writing a Compiler in Go](https://compilerbook.com/). This implementation is still in development. For now an interpreter and a compiler are fully implemented, allowing to run a REPL and to run Monkey files (`.monkey` extension). There are some issues that I want to fix before I can call this implementation complete. ### REPL To start the REPL, run the following command: ```bash monkey ``` ### File interpreter To run a Monkey file, run the following command: ```bash monkey ``` ### Other modes You can also test the compiler, parser and lexer in the same way, adding the following flag after the path to the file: ```bash monkey --mode ``` Where `` can be `compiler`, `parser`, `lexer` or `interpreter`. Example: ```bash monkey --mode compiler ``` ### Formatter A monkey formatter is also available, with the binary `monkeyfmt`. I will format any correct piece of monkey code. To use it you only need to run the following command: ```bash monkeyfmt ``` Adding the `-r` flag after the file name will replace the contents of the file with the formatted code. If the flag is not activated, the formatted code will be printed to `stdout`. ### Help To see the help, run the following command: ```bash monkey --help ``` ## Installation ### Crates.io `Chimpanzee` is available as a cargo crate, which means that you can install it by simple using: ```bash cargo install chimpanzee ``` ### From source To install it from source you bust clone the repo. Once you have clone it you build the project ```bash cargo build --release ``` > This step can take some time, the expected time is less that 2 minutes, but it can be even longer. In the directory `target/directory` the two executables will be now available: `monkey` and `monkeyfmt`. ## Monkey language Information about the monkey language is available in the [MONKEY file](docs/MONKEY.md).