From cbad83ee89dc66e25f03f4081c0affe5810749fd Mon Sep 17 00:00:00 2001 From: Iyamu Hope Date: Thu, 3 Nov 2022 05:26:04 +0100 Subject: [PATCH] Update README.md --- README.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index feb9c72..ddb68e3 100644 --- a/README.md +++ b/README.md @@ -1 +1,110 @@ -# monty +# Monty + +`monty` is an interpreter of Monty ByteCodes files, which is a scripting language just like Python. + +## About the Monty language +This is a language that contains specific instructions to manipulate data information (stacks or queues), where each instruction (*called opcode*) is sended per line. Files which contains Monty byte codes usually have the `.m` extension. + +Example (`file.m`): +```bash +$ cat file.m +# Pushing element to the stack +push 0 +push 1 +push 2 +# Printing all elements +pall +push 3 +push 4 +pop +# Rotating the stack to the bottom +rotr +pall +rotl +# Setting FIFO +queue +push 5 +# Setting LIFO +stack +push 5 +$ +``` + +## Technologies +* Interpreter was written with C language +* C files are compiled using `gcc 4.8.4` +* C files are written according to the C90 standard +* Tested on Ubuntu 14.04 LTS + +## Usage +To compile all files: + +```bash +$ gcc -Wall -Werror -Wextra -pedantic *.c -o monty +$ +``` + +The **synopsis** of the interpreter is the following: + +```bash +$ ./monty [filename] +$ +``` + +To run the interpreter: + +```bash +$ ./monty file.m +2 +1 +0 +0 +3 +2 +1 +$ +``` + +## Features +### Opcodes +`monty` executes the following opcodes: + +| Opcode | Description | +| -------- | ----------- | +| `push` | Pushes an element to the stack | +| `pall` | Prints all the values on the stack | +| `pint` | Prints the value at the top of the stack | +| `pop` | Removes the top element of the stack | +| `swap` | Swaps the top two elements of the stack | +| `queue` | Sets the format of the data to a queue (FIFO) | +| `stack` | Sets the format of the data to a stack (LIFO) | +| `nop` | Doesn't do anything | +| `add` | Adds the top two elements of the stack | +| `sub` | Subtracts the top element of the stack from the second top element of the stack | +| `mul` | Multiplies the second top element of the stack with the top element of the stack | +| `div` | Divides the second top element of the stack by the top element of the stack | +| `mod` | Computes the rest of the division of the second top element of the stack by the top element of the stack | +| `pchar` | Prints the char at the top of the stack | +| `pstr` | Prints the string starting at the top of the stack | +| `rotl` | Rotates the stack to the top | +| `rotr` | Rotates the stack to the bottom | + +Comments, indicated with `#`, are not executed by the interpreter. + +When a **nonextistent opcode** is passed, the interpreter prints an error message and stops: + +```bash +$ cat errorfile.m +push 1 +pint +pcx +$ ./monty errorfile.m +1 +L3: unknown instruction pcx +``` + +### Return value +When there is no errors, `monty` returns `0`. Otherwise, returns `1` + +## Authors +* Iyamu Hope: [LinkedIn](https://linkedin.com/in/iyamuhope) - [GitHub](https://github.com/horpeazy)