Befunge

Befunge  er et stakbaseret esoterisk programmeringssprog . Det betragtes som todimensionelt , da Befunge- programmet er skrevet i en tabel med syede kanter ( torus ), langs hvilke tolken bevæger sig i forskellige retninger og udfører kommandoerne i dens celler. Sprogets navn blev født ud fra en tastefejl i ordet "før".

Den første version af Befunge-sproget blev skabt af Chris Pressy i 1993 . Ifølge forfatteren var hans mål at udvikle et sprog, der er så svært at kompilere som muligt . Kompleksiteten er givet af kommandoerne p og g , der ændrer programteksten.

Befunge -93- versionen er begrænset til en tabel på 25X80 (standard tekstskærmstørrelse ) og er derfor ikke Turing komplet . Befunge på et uendeligt bord er Turing komplet .

Alle endimensionelle programmeringssprog kræver en vis syntaktisk skelnen mellem kommentarer og kildekode. Befunge-sproget har ikke en specifik syntaks for kommentarer til at indsætte dokumentation i kode, programmøren vikler blot kontrollen rundt om kommentarområdet.

Befunge kommandosystem

Befunge sprogkommandoer er angivet nedenfor. Hver kommando er kodet med et ASCII- tegn. For stakoperationer er deres ækvivalent i det fjerde sprog angivet i parentes . Kommandoer, der tager parametre fra stakken, slår dem ud af stakken.

forskydning (9):
> flyt til højre
< bevæg dig til venstre
^ rykke op
v Flyt ned
_ Flyt til højre, hvis toppen af ​​stakken er 0, ellers flyt til venstre.
| Flyt ned, hvis toppen af ​​stakken er 0, ellers flyt op.
? Bevæg dig i en tilfældig retning
# Spring næste celle over ("springbræt")
@ Slut på programmet
stak manipulation (3):
: Skub en kopi af toppunktet på stakken (frem:DUP)
\ Skift toppunkt og subvertex (forth:SWAP)
$ Slet toppunkt (forth:DROP)
programkode ændring (2):
s "PUT": cellekoordinaterne og ASCII-koden for tegnet, der er placeret ved disse koordinater, bliver poppet fra stakken
g "GET": cellekoordinater hentes fra stakken; ASCII-koden for tegnet ved disse koordinater skubbes ind på stakken
konstanter (2):
0-9 skub et tal på stakken
" Start/slut tegntilstand, hvor ASCII-koderne for alle aktuelle programtegn skubbes ind på stakken
stak aritmetiske operationer (5):
+ Top og subtop tilføjelse (frem:+)
- Træk top og bund (fremad :-)
* Multiplicer top og bund (fremad:*)
/ Heltalsdivision (frem:/)
% Modulo (tilbage:MOD)
stak logiske operationer (2):
! Negativt: nul øverst er erstattet af 1, ikke-nul værdi erstattes af 0 (forth:0=)
` Større end sammenligning: hvis undernoden er større end toppen, tryk 1 på stakken, ellers 0 (frem:>)
input-output (4):
& Bed brugeren om et nummer og skub det ind på stakken
~ Bed brugeren om et tegn og skub dens ASCII-kode ind på stakken
. Udskriv toppen af ​​stakken som et heltal (frem:.)
, Udskriv tegnet, der svarer til ASCII-koden øverst i stakken (forth:EMIT)

Programeksempler

Endless loop :

>v ^<

Et program, der udskriver Hello, World! »:

>v @,,,,,,,,,,,"Hej verden!"<

Generator af tilfældige tal:

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

Output af de første 14 (fra 0 til 233) Fibonacci-tal :

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