Компилятор для стекового языка с постфиксным синтаксисом.
Целевая платформа: linux-x86_64
Тьюринг-полнота:
- арифметические операции
- dup, drop, take
- списки команд
- ветвление
- биндинги
Прикольчики:
- e2e-тесты
- написанная документация mdbook
- понятные ошибки, предупреждения, сообщения
- debug-проверки и debug-info
- рефакторинг взаимодействия с
nasm
,ld
- мидварь для compile-time проверок и оптимизаций
- макросы на кодген
- информация о типах
- стек в динамической памяти
- гипотеза: аннотации для безопасной работы со стеком
- 32-битные числа со знаком;
- Арифметические операторы
+
,-
,*
,/
; - Логические операторы
not
,and
,or
,==
,!=
,>
,>=
,<=
,<
(правда ==1
, ложь ==0
); - Побитовые операторы
not
,and
,or
; - Оператор вывода в stdout
.
; - Комментарии, начинающиеся с
#
до конца строки; - Операторы
dup
(дублировать элемент на вершине стека),drop
(сбросить элемент на вершину стека),take
(положить N элемент на вершину стека, где N -- значение элемента на вершине до операции); - Списки команд, заключенные в
[
и]
; - Оператор применения списка команд
!
; - Оператор
b
преобразования числаX
по правилу:
X == 0 => X = 0
X != 0 => X = 1
- Оператор ветвления
?
(в зависимости от значения вершины стека оставляет после себя первое или второе значение на стеке); - Оператор
:{name}
для привязывания имени к элементу с вершины стека. Оператор привязки возможно указать только 1 раз для одного имени (временная дырка до ввода мидлвари); - Оператор
{name}
, кладущий на стек элемент, привязанный к имениname
.
Для установки необходимо выполнить:
curl -sSfL https://raw.githubusercontent.com/vzalygin/plc/refs/heads/master/install.sh | sh
В системе должны быть установлены cargo
, nasm
.
Скомпилировать компилятор:
git clone https://github.com/vzalygin/plc
cd plc
cargo build
Доступны в папке examples