Brainfuck programozási nyelv
A Wikipédiából, a szabad lexikonból.
A Brainfuck programozási nyelv egy 8 utasítást tartalmazó Turing (Turing-complete) programozási nyelv. A Brainfuck szó az angol brain (=agy) és fuck (=szexuálisan közösülni) szavakból áll össze, ami a programok nehéz megírására utal.
A nyelvet Urban Müller készítette Amiga OS 2.0 alá azzal a céllal, hogy olyan Turing-nyelvet hozzon létre, amire a lehető legkisebb fordítóprogramot meg tudja írni. (Ez eredetileg 240 byte hosszú volt, de híresztelések szerint sikerült később 200 byte alatt megírnia.)
A Turing-komplett nyelvekkel minden lehetséges program megírható. Mivel ez a lehetséges programozási módok közül az egyik legnehezebb, legátláthatatlanabb, ezért kaphatta a nyelv az "agycseszegető" nevet (finoman fordítva).
Tartalomjegyzék |
[szerkesztés] A nyelv szerkezete
A Brainfuck nyelvnek egy univerzális byte mutatója van, aminek a neve "pointer", ami szabadon mozoghat egy 30 000 byte nagyságú tömbben, melynek alapértékei nullák. A pointer a tömb elején indul.
A nyelv 8 parancsát egy-egy karakter reprezentálja:
| > | Pointer növelése eggyel |
| < | Pointer csökkentése eggyel |
| + | A Pointernél levő byte növelése eggyel |
| - | A Pointernél levő byte csökkentése eggyel |
| . | A Pointernél levő byte kiírása |
| , | Byte bekérése és a Pointernél tárolása |
| [ | Ugrás a következő, megfelelő ] jelig ha a Pointer alatti byte nulla. |
| ] | Ugrás az előző, megfelelő [ jelig. |
[szerkesztés] Példaprogramok
A legtöbb Brainfuck program több száz, vagy több ezer karakterből áll. Íme két extrém pici program, ami igazából semmi hasznosat nem csinál a bemutatáson túl.
[szerkesztés] ASCII
Az alábbi program kiírja az ASCII karakterkészletet; szerzője Jeffry Johnston, 2001
.+[.+]
[szerkesztés] Echo
Ez a program minden beadott karaktert kiír addig, míg egy ASCII 255 karaktert nem kap.
,+[-.,+]
[szerkesztés] Fordiit
A beadott karaktereket kiadja ellensorrendben. (enter/soremel=10)
+[>,----- -----]<-[+ +++++ +++++.<-]
(nekem nem működött) de ez itt van ugyanarra:
>,[>,]<[.<]
[szerkesztés] TOP-BOT
Egy szimpla polyglot, amit 'a' meg 'b' karakterrel hajtunk [80x25]. (Pascal 6.0 meg BrainFuck nyelven is helyes, ugyanazt is csinálja)
uses
crt;
var
top:char; bot:char; ch:char;
a:word;
begin
top:=char(47); {>>>+++ +++[<++++ ++++[<+<+>>-]>-] <<-<-->}
bot:=char(46);
repeat {[}
for a:=1 to 80 do {>++++ ++++[<..... .....>-]}
write(top);
for a:=1 to 1919 do{>> ++++ +++++[<+++ ++++[<+++ +++[<<.. ...>>-] >-] >-] }
write(bot); {<< +++ [<<.... .....>>-] <<..>>}
ch:=readkey; {>>>,[<+<+<+>>>-]}
write(ch);
case ch of {+++++ +++++ [>+++++ +++++[<<-<->>>-]<-]}
'a': inc(top); {+< +++[>[-]<-]>[<<<<+>>>>-]<}
'b': inc(bot); {+< ++ [>[-]<-]>[<<<<+>>>>-]<}
#27: top:=#0; {+++[<---- ----->-] +< [>[-]<-]>[<<[-]<[-]>>>-]<<}
end;
until top=#0; {]}
end.


Based on work by