A Brainfuck programozási nyelv egy nyolc utasítást tartalmazó Turing-teljes (Turing-complete) ezoterikus programozási nyelv. A Brainfuck szó az angol brain ’agy’ és fuck ’szexuálisan közösülni, durván behatolni’ 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-teljes 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).

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 nyolc parancsát egy-egy karakter reprezentálja:

>  A pointer növelése eggyel<A 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ő ] jel utánig, ha a pointer alatti byte nulla.]Ugrás az előző, megfelelő [ jelig.

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.

ASCII Az alábbi program kiírja az ASCII karakterkészletet; szerzője Jeffry Johnston, 2001 .+[.+]

Echo Ez a program minden beadott karaktert kiír addig, míg egy ASCII 255 karaktert nem kap. ,+[-.,+]

Fordít A beadott karaktereket kiadja ellensorrendben (enter/soremel=10). +[>,----- -----]<-[+ +++++ +++++.<-]

A következő példa ugyanazt csinálja, mint az előző, de csak akkor működik, ha a fordító/interpreter az entert 0-vá alakítja (így nem kell sem levonni, sem hozzáadni 10-et, mint az előbb). >,[>,]<[.<]

TOP-BOT Egy szimpla polyglot, amit 'a' és 'b' karakterrel hajtunk [80x25]. A program Turbo Pascal és BrainFuck nyelven is lefordul, és az eredménye azonos program TopBot; uses Crt; var Top: char; Bot: char; Ch: char; i: word; begin Top := #47; {>>>+++ +++[<++++ ++++[<+<+>>-]>-] <<-<-->} Bot := #46; repeat {[} for i := 1 to 80 do {>++++ ++++[<..... .....>-]} Write(Top); for i := 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.

Hello World +++++ +++++ [ > +++++ ++ > +++++ +++++ > +++ > + <<<< - ] > ++ . 'H' > + . 'e' +++++ ++ . 'l' . 'l' +++ . 'o' >++ . ' ' << +++++ +++++ +++++ . 'W' > . 'o' +++ . 'r' ----- - . 'l' ----- --- . 'd' > + . '!'

Egy sorban: ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Két megadott byte összeadása , #0 feltöltése > pointer növelése , #1 feltöltése

[ ciklus kezd (ha a pointer alatti byte 0 akkor hagyja ki a következő zárójel bezár utánig a kódot) - #1 csökkentése < pointer csökkentése + #0 növelése > pointer növelése ] ciklus vége

< pointer csökkentése . #0 kiírása

Egy sorban:

,>,[-<+>]<.

Jegyzetek

További információk JavaScript nyelven írt BrainFuck értelmező. Webes BrainFuck értelmező. Másik webes BrainFuck értelmező és gépikódú fordító. Brainfuck – An Eight-Instruction Turing-Complete Programming Language Brainfuck interpreter with integrated debugger (IDE) for Windows bkil ASCII BF interpretere

Kategória:Ezoterikus programozási nyelvek