Привет! Сейчас расскажу как написать простую виртуальную машину на Python. Надеюсь кто-то найдет эту статью интересной.
Мы не будем реализовывать парсер и компилятор, а сделаем пока что только машину-интерпретатор нашего ассемблера.
У нас будет стековая машина, и она будет использовать два стека:
Сам код будет представлять собой list из команд, которые тоже являются list'ами:
Мы не будем реализовывать парсер и компилятор, а сделаем пока что только машину-интерпретатор нашего ассемблера.
У нас будет стековая машина, и она будет использовать два стека:
- стек значений, куда будут складываться/забираться временные значения вычислений и результаты вызова функций
- стек вызовов, куда мы будем запоминать, в какое место кода нужно вернуться после завершения функции
Сам код будет представлять собой list из команд, которые тоже являются list'ами:
code = [
['val', 2], # положить 2 на стек
['val', 3], # положить 3 на стек
['get', '*'], # положить на стек значение переменной с названием * (функция умножения)
['call', 2], # взять с вершины стека функцию и вызвать ее с 2 аргументами со стека (они тоже вынимаются), результат функции кладется на стек
['get', 'puts'], # положить функцию печати
['call', 1], # напечатать
]