Skip to content

FacelessLord/Befunge

Repository files navigation

Befunge FInterpreter

Версия 1.1.0a

Автор: Стрелец Илья (skyres21@gmail.com)

Описание

Данное приложение является интерпретатором для языка Befunge

Требования

  • Python версии не ниже 3.7

Состав

  • Модули: befunge/
  • Тесты: tests/

Консольная версия

Пример запуска: ./python3 runner.py

Аргументы запуска

  • --log-level - указать уровень логгирования: INFO(по умолчанию), DEBUG, ERROR, CRITICAL, FATAl (Прим: python3 runner.py --log-level DEBUG)
  • -p - ввод через цепочку вызовов (Прим: cat program.txt | python3 runner.py -p)
  • -f - чтение из файла (Прим: python3 runner.py -f program.txt)
  • --debug - debug-режим (доступен только для файла и программы, введённой вручную)
  • -h, --help - вывод укороченной версии данного файла

Пример программы

>1    v
      
>     v
      2
^  .:*<
  • Вывод степеней двойки начиная с 2

Команды

Ниже перечислены команды языка Befunge. Каждая команда кодируется одним ASCII-символом. Для стековых операций в скобках дан их эквивалент в языке Forth. Команды, берущие параметры из стека, удаляют их со стека.

перемещение (9):

Инструкция Описание
> Двигаться вправо
< Двигаться влево
^ Двигаться вверх
v Двигаться вниз
_ Двигаться вправо, если на вершине стека 0, иначе — влево.
| Двигаться вниз, если на вершине стека 0, иначе — вверх.
? Двигаться в случайном направлении
# Пропустить следующую ячейку ("трамплин")
@ Конец программы

манипулирование со стеком (3):

Инструкция Описание
: Поместить в стек копию вершины (forth:DUP)
\ Обменять местами вершину и подвершину (forth:SWAP)
$ Удалить вершину (forth:DROP)

модификация кода программы (2):

Инструкция Описание
p "PUT": со стека извлекаются координаты ячейки и ASCII-код символа, который помещается по этим координатам
g "GET": со стека извлекаются координаты ячейки; ASCII-код символа по этим координатам помещается в стек

константы (2):

Инструкция Описание
0-9 Поместить число в стек
" Начало/конец символьного режима, в котором ASCII-коды всех текущих символов программы помещаются в стек

стековые арифметические операции (5):

Инструкция Описание
+ Сложение вершины и подвершины (forth:+)
- Вычитание вершины и подвершины (forth:-)
* Умножение вершины и подвершины (forth:*)
/ Целочисленное деление (forth:/)
% Остаток от деления (forth:MOD)

стековые логические операции (2):

Инструкция Описание
! Отрицание: нуль на вершине заменяется на 1, ненулевое значение — на 0 (forth:0=)
` Сравнение "больше, чем": если подвершина больше вершины, в стек помещается 1, иначе 0 (forth:>)

ввод-вывод (4):

Инструкция Описание
& Запросить у пользователя число и поместить его в стек
~ Запросить у пользователя символ и поместить в стек его ASCII-код
. Распечатать вершину стека как целое число (forth:.)
, Распечатать символ, соответствующий ASCII-коду на вершине стека (forth:EMIT)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages