Befunge

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
  .  >  >   ^
 ^<

Вывод первых 14-ти (от 0 до 233) чисел Фибоначчи:

62*1+v>01p001>+v>\:02p\:02gv
     0       ^             <
     .         :p
     "         .1
        v 0," "<0
     "  >1g12-+:|
     ,          @
     >^

Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Befunge" в других словарях:

  • Befunge — Saltar a navegación, búsqueda Befunge es un lenguaje de programación esotérico, funge oide, reflexivo y basado en pila. Difiere de los lenguajes convencionales en que los programas están dispuestos en una parrilla bidimensional. Las instrucciones …   Wikipedia Español

  • Befunge — ist eine esoterische Programmiersprache von Chris Pressey, die ähnlich wie Forth Stack orientiert ist. Die Programme basieren auf einem 2 dimensionalen Schema. Der Quelltext besteht aus ASCII Zeichen in einer 80×25 Zeichen großen Anordnung. Chris …   Deutsch Wikipedia

  • Befunge — is a stack based, reflective, esoteric programming language. It differs from conventional languages in that programs are arranged on a two dimensional grid. Arrow instructions direct the control flow to the left, right, up or down, and loops are… …   Wikipedia

  • Befunge — est un langage de programmation exotique réflexif à pile. Il diffère des langages conventionnels par le fait qu il est arrangé sur une grille à deux dimensions. Des instructions flèche dirigent le flux de contrôle à gauche, à droite, en haut, en… …   Wikipédia en Français

  • Befunge — es un lenguaje de programación esotérico diseñado por Chris Pressey en 1993. La programación resulta puramente visual y el código es una imagen 2d compuesta por caracteres sobre la cual el puntero de ejecución se desplaza en diferentes… …   Enciclopedia Universal

  • Befunge-93 — …   Википедия

  • Esoteric programming language — An esoteric programming language (sometimes shortened to esolang) is a programming language designed as a test of the boundaries of computer programming language design, as a proof of concept, or as a joke. There is usually no intention of the… …   Wikipedia

  • Liste von Hallo-Welt-Programmen/Sonstige — Dies ist eine Liste von Hallo Welt Programmen für grafische Benutzeroberflächen, Web Technologien, exotische Programmiersprachen und Textauszeichnungssprachen. Weitere Beispiele für gebräuchliche Programmiersprachen sind unter Liste von Hallo… …   Deutsch Wikipedia

  • Weird Programming — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Эзотерические языки программирования — вид языков программирования, не предназначенных для практического применения. Образец компьютерного юмора. Эзотерические языки придумываются для развлечения, часто они пародируют «настоящие» или являются абсурдным воплощением «серьёзных»… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»