Befunge

Befunge  je esoterický programovací jazyk založený na zásobníku . Je považován za dvourozměrný , protože program Befunge je napsán v tabulce se sešívanými okraji ( torus ), po které se interpret pohybuje různými směry a provádí příkazy umístěné v jeho buňkách. Název jazyka se zrodil z překlepu ve slově „před“.

První verzi jazyka Befunge vytvořil Chris Pressy v roce 1993 . Podle autora bylo jeho cílem vyvinout jazyk, který bude co nejobtížnější na kompilaci . Složitost zajišťují příkazy p a g , které upravují text programu.

Verze Befunge-93 je omezena na tabulku 25X80 (standardní velikost textové obrazovky ), a proto není Turingova kompletní . Befunge na nekonečném stole je Turing kompletní .

Všechny jednorozměrné programovací jazyky vyžadují určité syntaktické rozlišení mezi komentáři a zdrojovým kódem. Jazyk Befunge nemá specifickou syntaxi pro komentáře pro vkládání dokumentace do kódu, programátor jednoduše obalí ovládací prvek kolem oblasti komentáře.

Příkazový systém Befunge

Příkazy jazyka Befunge jsou uvedeny níže. Každý příkaz je zakódován jedním znakem ASCII . U zásobníkových operací je jejich ekvivalent ve Forth jazyce uveden v závorkách . Příkazy, které přebírají parametry ze zásobníku, je vytahují ze zásobníku.

výtlak (9):
> pohyb vpravo
< pohyb doleva
^ posunout nahoru
proti posunout dolů
_ Posuňte se doprava, pokud je horní část zásobníku 0, jinak se posuňte doleva.
| Posuňte se dolů, pokud je horní část zásobníku 0, jinak se posuňte nahoru.
? Pohybujte se náhodným směrem
# Přeskočit další buňku („odrazový můstek“)
@ Konec programu
manipulace se zásobníkem (3):
: Posuňte kopii vrcholu do zásobníku (forth:DUP)
\ Zaměnit vertex a subvertex (dále: SWAP)
$ Smazat vertex (forth:DROP)
úprava programového kódu (2):
p "PUT": souřadnice buňky a ASCII kód ​​znaku, který je umístěn na těchto souřadnicích, jsou vyjmuty ze zásobníku
G "GET": souřadnice buňky jsou načteny ze zásobníku; ASCII kód ​​znaku na těchto souřadnicích je vložen do zásobníku
konstanty (2):
0-9 vložit číslo na hromádku
" Režim počátečních/koncových znaků, ve kterém jsou ASCII kódy všech aktuálních programových znaků vloženy do zásobníku
zásobníkové aritmetické operace (5):
+ Přidání nahoře a dole (dále:+)
- Odečtěte nahoře a dole (vpřed :-)
* Vynásobte horní a dolní část (dále:*)
/ Celočíselné dělení (dále:/)
% Modulo (dále:MOD)
zásobníkové logické operace (2):
! Záporné: nula nahoře je nahrazena 1, nenulová hodnota je nahrazena 0 (forth:0=)
` Větší než srovnání: pokud je poduzel větší než horní, stiskněte 1 na zásobníku, jinak 0 (dále:>)
vstup-výstup (4):
& Požádejte uživatele o číslo a zatlačte ho na hromádku
~ Požádejte uživatele o znak a vložte jeho ASCII kód ​​do zásobníku
. Vytiskněte horní část balíčku jako celé číslo (forth:.)
, Vytiskněte znak odpovídající kódu ASCII v horní části balíčku (dále: EMIT)

Příklady programů

Nekonečná smyčka :

>v ^<

Program, který vytiskne Hello, World! »:

>v @,,,,,,,,,,,,"Ahoj světe!"<

Generátor náhodných čísel:

vv<< 2 ^v< v1<?>3v4 ^ ^ > >?> ?>5^ vv v9<?>7v6 vv< osm . >> ^ ^<

Výstup prvních 14 (od 0 do 233) Fibonacciho čísel :

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