A language interpreter made in the C programming language to manage stacks and queues (LIFO and FIFO). The aim is to interpret Monty bytecodes files. Monty is a language that aims to close the gap between scripting and programming languages.
- Allowed editors: vi, vim, emacs
- All your files will be compiled on Ubuntu 20.04 LTS using gcc, using the options -Wall -Werror -Wextra -pedantic -std=c90
- All your files should end with a new line
- A README.md file, at the root of the folder of the project is mandatory
- Your code should use the Betty style. It will be checked using betty-style.pl and betty-doc.pl
- You allowed to use a maximum of one global variable
- No more than 5 functions per file
- You are allowed to use the C standard library
- The prototypes of all your functions should be included in your header file called monty.h
- Don’t forget to push your header file
- All your header files should be include guarded
- You are expected to do the tasks in the order shown in the project
To compile this project, you can use the following command:
$ make
opcode | functionality |
---|---|
push | add element to the 'top' of stack and 'end' of queue |
pop | remove element from 'top' of stack and 'end' of queue |
pall | print every member of the structure |
pint | prints the member value at the top of stack |
swap | swaps the order of the 1st and 2nd elements in stack |
add | add top two member values |
sub | subtract the top element from the 2nd top element |
div | divide the 2nd element by the top element |
mul | multiply the top two elements of the stack |
mod | the remainder when the 2nd element is divided by the top element |
comment | there is the ability to parse comments found in bytecode ->'#' |
pchar | print character at the top of the stack |
pstr | print the character at the top of the stack |
rotl | moves element at the top to the bottom of the stack |
rotr | the bottom of the stack becomes the top |
queue, stack | toggles the doubly link list implementation style |
nop | opcode should do nothing |
Examples:
$ cat opcodetestfile.m
push 1
push 2
push 3
pall
$ ./montyfile opcodetestfile.m
3
2
1
$
$ cat opcodetestfile.m
push 1
push 2
push 3
pall
rotl
pall
$ ./montyfile opcodetestfile.m
3
2
1
2
1
3
Exits with status EXIT_FAILURE
All files were compiled on Ubuntu 14.04 LTS.
All programs and functions were compiled with gcc 4.8.4
using flags -Wall -Werror -Wextra and -pedantic
.
All files have been written in the Betty Style.
Tarikwa Tesfa - Github