Befunge

A Befunge  egy verem alapú ezoterikus programozási nyelv . Kétdimenziósnak tekinthető , mivel a Befunge program egy összefűzött élekkel ( tórusz ) ellátott táblázatba van írva, amely mentén az értelmező különböző irányokba mozog , végrehajtva a celláiban található parancsokat. A nyelv neve az „előtte” szó elírásából született.

A Befunge nyelv első változatát Chris Pressy készítette 1993 -ban . A szerző elmondása szerint célja egy olyan nyelv kialakítása volt, amelyet a lehető legnehezebben lehet fordítani . A bonyolultságot a program szövegét módosító p és g parancsok biztosítják.

A Befunge-93 verzió egy 25x80-as táblázatra korlátozódik (a szabványos szöveges képernyőméret ), ezért nem teljes a Turing . A Befunge egy végtelen asztalon a Turing teljes .

Minden egydimenziós programozási nyelv bizonyos szintaktikai különbséget tesz a megjegyzések és a forráskód között. A Befunge nyelvnek nincs külön szintaxisa a megjegyzésekhez, hogy a dokumentációt beillessze a kódba, a programozó egyszerűen a megjegyzés terület köré csavarja a vezérlőt.

Befunge parancsrendszer

A Befunge nyelvi parancsok az alábbiakban találhatók. Minden parancs egy ASCII karakterrel van kódolva. Veremműveletek esetén a Forth nyelvű megfelelőjük zárójelben van megadva . Azok a parancsok, amelyek paramétereket vesznek át a veremből, kiemelik azokat a veremből.

elmozdulás (9):
> Mozdulj jobbra
< menj balra
^ feljebb lépni
v mozogni lefelé
_ Mozogjon jobbra, ha a verem teteje 0, ellenkező esetben balra.
| Mozogjon lefelé, ha a verem teteje 0, ellenkező esetben lépjen felfelé.
? Mozgás véletlenszerű irányban
# Következő cella kihagyása ("ugródeszka")
@ Program vége
veremkezelés (3):
: Tolja a csúcs egy példányát a verembe (előre:DUP)
\ Csúcs és alcsúcs felcserélése (előre: SWAP)
$ Csúcs törlése (forth:DROP)
programkód módosítás (2):
p "PUT": a cella koordinátái és az ezekre a koordinátákra helyezett karakter ASCII kódja kikerül a veremből
g "GET": a cella koordinátáit a rendszer lekéri a veremből; Az ezeken a koordinátákon lévő karakter ASCII-kódja a verembe kerül
állandók (2):
0-9 nyomj egy számot a verembe
" Kezdő/vége karakter mód, amelyben az összes aktuális program karakter ASCII kódja a verembe kerül
verem aritmetikai műveletek (5):
+ Felső és alsó hozzáadás (előre:+)
- A felső és az alsó kivonása (előre:-)
* A felső és az alsó szorzása (előre:*)
/ Egész számok osztása (előre:/)
% Modulo (előre: MOD)
verem logikai műveletek (2):
! Negatív: a tetején lévő nulla helyére 1, a nullától eltérő érték helyére 0 (elöl: 0=)
` Nagyobb, mint az összehasonlítás: ha az alcsomópont nagyobb, mint a felső, nyomja meg az 1-et a veremben, ellenkező esetben a 0-t (előre:>)
bemenet-kimenet (4):
& Kérjen a felhasználótól egy számot, és nyomja be a verembe
~ Kérjen a felhasználótól egy karaktert, és nyomja be az ASCII-kódját a verembe
. Nyomtassa ki a köteg tetejét egész számként (előre:.)
, Nyomtassa ki az ASCII-kódnak megfelelő karaktert a verem tetején (forth:EMIT)

Programpéldák

Végtelen hurok :

>v ^<

Egy program, amely a Hello, World! »:

>v @,,,,,,,,,,,"Hello World!"<

Véletlenszám generátor:

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

Az első 14 (0-tól 233-ig) Fibonacci-szám kimenete :

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