Awesome
Interpreter
by Ganesh Sankaran
This is a simple interpreter for a simple stack-based ISA.
Execution
python3 interpreter.py <program name>
A sample program is given in program.txt
.
ISA
The ISA is based on Whitespace's. My mnemonics can be found in handlers.py
:
handlers = {
'push': push,
'pop': pop,
'dup': dup,
'swap': swap,
'add': add,
'sub': sub,
'mul': mul,
'div': div,
'mod': mod,
'load': load,
'store': store,
'label': label,
'call': call,
'jump': jump, # unconditional jump
'jnil': jnil, # jump if TOS == 0
'jneg': jneg, # jump if TOS < 0
'ret': ret,
'halt': halt,
'getchar': getchar,
'getint': getint,
'putchar': putchar,
'putint': putint
}
VM Stack and Heap
The object vm
in handlers.py
contains the program counter, return address stack, operand stack, and runtime heap.