Skip to content

vzalygin/plc

Repository files navigation

Postfix language compiler

Компилятор для стекового языка с постфиксным синтаксисом.

Целевая платформа: 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