Monty 0.98 is a scripting language that is first compiled into Monty byte codes (Just like Python).
It relies on a unique stack, with specific instructions to manipulate it.
The goal of this project is to create an interpreter for Monty ByteCodes files.
- What do LIFO and FIFO mean
- What is a stack, and when to use it
- What is a queue, and when to use it
- What are the common implementations of stacks and queues
- What are the most common use cases of stacks and queues
- What is the proper way to use global variables
Please use the following data structures for this project. Don’t forget to include them in your header file.
/**
* struct stack_s - doubly linked list representation of a stack (or queue)
* @n: integer
* @prev: points to the previous element of the stack (or queue)
* @next: points to the next element of the stack (or queue)
*
* Description: doubly linked list node structure
* for stack, queues, LIFO, FIFO
*/
typedef struct stack_s
{
int n;
struct stack_s *prev;
struct stack_s *next;
} stack_t;
/**
* struct instruction_s - opcode and its function
* @opcode: the opcode
* @f: function to handle the opcode
*
* Description: opcode and its function
* for stack, queues, LIFO, FIFO
*/
typedef struct instruction_s
{
char *opcode;
void (*f)(stack_t **stack, unsigned int line_number);
} instruction_t;
- Your code will be compiled this way:
$ gcc -Wall -Werror -Wextra -pedantic -std=c89 *.c -o monty
- Any output must be printed on
stdout - Any error message must be printed on
stderr - Here is a link to a GitHub repository that could help you making sure your errors are printed on
stderr
-
Usage:
monty file- where
fileis the path to the file containing Monty byte code
- where
-
If the user does not give any file or more than one argument to your program, print the error message
USAGE: monty file, followed by a new line, and exit with the statusEXIT_FAILURE -
If, for any reason, it’s not possible to open the file, print the error message
Error: Can't open file <file>, followed by a new line, and exit with the statusEXIT_FAILURE- where
<file>is the name of the file
- where
-
If the file contains an invalid instruction, print the error message
L<line_number>: unknown instruction <opcode>, followed by a new line, and exit with the statusEXIT_FAILURE
-
where is the line number where the instruction appears.
- Line numbers always start at 1
-
The monty program runs the bytecodes line by line and stop if either:
- it executed properly every line of the file
- it finds an error in the file
- an error occured
-
If you can’t malloc anymore, print the error message
Error: malloc failed, followed by a new line, and exit with statusEXIT_FAILURE. -
You have to use
mallocandfreeand are not allowed to use any other function fromman malloc(realloc, calloc, …)