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 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) |
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-+:| , @ >^
Programmeringssprog | |
---|---|
|