Первая и вторая лабораторные работы по Языкам Системного Программирования, 2 курс.
- Базовая Forth-машина
- Комлилятор Forth-команд
- Bootstrapped
Интерпретатор расчитан для работы на Linux с 64-ех битной архитектурой и установленным nasm
Совместимо с Windows 10 Linux Subsystem
Совместимость с MacOS X не установлена
Сборка:
nasm -felf64 -g "interpreter.asm" -o interpreter.o
ld -o interpreter interpreter.o
chmod +x interpreter
- .S -- не разрушая стек печатает всё его содержимое.
- +, -, *, / -- Арифметика
- <, >, = -- сравнение (кладёт на вершину стека 1, если условие истинно)
- and, or, not -- логика (истина -- число, отличное от нуля)
- rot -- a b c -> b c a
- swap -- меняет два последних элемента стека местами
- dup -- дублирует элемент на вершине стека
- drop -- снимает элемент с вершины стека
- . -- снимает элемент с вершины стека и печает на экран
- key читает символ с stdin и помещает на вершину стека
- emit -- снимает с вершины стека символ и печатает в stdout
- number -- читает с stdin знаковое число и помещает в стек
- mem -- загрузит в стек константу – адрес начала пользовательской памяти.
- ! -- снимает элемент с вершины стека и записывает, по адресу, лежащему на новой вершине стека
- @ -- читает содержимое памяти по адресу, указанному на вершине стека
- : -- переход в режим комплилирования
- exit -- Выход из интерпретатора
- ; -- Выход из режима компилирования
- branch n -- безусловный переход на n слов вперёд (доступно только в режиме комплирирования)
- branch0 n -- переход на n слов вперёд, если на вершине стека нуль
Интерпретатор Forth позволяет кодировать команду через последовательность уже известных команд. Синктаксис:
: имя_команды [команда/число] ;
Если вместо команды указано число, оно будет положено на вершину стека.
: sq dup * ;
: discr rot 4 * * swap sq swap - ;
1 2 3 discr .
Результатом выполнения этой команды discr будет дискриминант квадратного уравения 1x2+2x+3=0 на вершине стека.
Форк тестера функций библиотеки по вводу и выводу. Требуется Python 2.7.x
Всю дополнительную информацию можно узнать в группе курса