Befunge
Befunge — стековый эзотерический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды, расположенные в её ячейках.
Первая версия языка Befunge была создана Крисом Пресси в 1993. Как утверждал автор, его целью было разработать язык, максимально сложный для компиляции. Сложность обеспечивается командами p и g, модифицирующими текст программы.
Версия Befunge-93 ограничена таблицей 25X80 (стандартный размер текстового экрана) и потому не обладает тьюринговской полнотой. Befunge на бесконечной таблице полон по Тьюрингу.
Все одномерные языки программирования требуют некоторых синтаксических различий между комментариями и исходным кодом. В языке Befunge нет особого синтаксиса для комментариев, чтобы вставить документацию в код программист просто «обводит» управление вокруг области комментария.
Система команд Befunge
Ниже перечислены команды языка Befunge. Каждая команда кодируется одним ASCII-символом. Для стековых операций в скобках дан их эквивалент в языке Forth. Команды, берущие параметры из стека, удаляют их со стека.
| перемещение (9): | |
| > | Двигаться вправо |
| < | Двигаться влево |
| ^ | Двигаться вверх |
| v | Двигаться вниз |
| _ | Двигаться вправо, если на вершине стека 0, иначе — влево. |
| | | Двигаться вниз, если на вершине стека 0, иначе — вверх. |
| ? | Двигаться в случайном направлении |
| # | Пропустить следующую ячейку ("трамплин") |
| @ | Конец программы |
| манипулирование со стеком (3): | |
| : | Поместить в стек копию вершины (forth:DUP) |
| \ | Обменять местами вершину и подвершину (forth:SWAP) |
| $ | Удалить вершину (forth:DROP) |
| модификация кода программы (2): | |
| p | "PUT": со стека извлекаются координаты ячейки и ASCII-код символа, которой помещается по этим координатам |
| g | "GET": со стека извлекаются координаты ячейки; ASCII-код символа по этим координатам помещается в стек |
| константы (2): | |
| 0-9 | Поместить число в стек |
| " | Начало/конец символьного режима, в котором ACSII-коды всех текущих символов программы помещаются в стек |
| стековые арифметические операции (5): | |
| + | Сложение вершины и подвершины (forth:+) |
| - | Вычитание вершины и подвершины (forth:-) |
| * | Умножение вершины и подвершины (forth:*) |
| / | Целочисленное деление (forth:/) |
| % | Остаток от деления (forth:MOD) |
| стековые логические операции (2): | |
| ! | Отрицание: нуль на вершине заменяется на 1, ненулевое значение — на 0 (forth:0=) |
| ` | Сравнение "больше, чем": если подвершина больше вершины, в стек помещается 1, иначе 0 (forth:>) |
| ввод-вывод (4): | |
| & | Запросить у пользователя число и поместить его в стек |
| ~ | Запросить у пользователя символ и поместить в стек его ASCII-код |
| . | Распечатать вершину стека как целое число (forth:.) |
| , | Распечатать символ, соответствующий ASCII-коду на вершине стека (forth:EMIT) |
Примеры программ
>v ^<
Программа, печатающая «Hello World!»
> v @,,,,,,,,,,,,"Hello World!"<
Генератор случайных чисел
vv < <
2
^ v<
v1<?>3v4
^ ^
> >?> ?>5^
v v
v9<?>7v6
v v<
8
. > > ^
^<
Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические | |
de:Befunge en:Befunge es:Befunge fr:Befunge gl:Befunge ja:Befunge ko:비펀지 nl:Befunge pl:BeFunge pt:Befunge sk:Befunge sv:Befunge
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....