Brainfuck
brainfuck | |
Paradigma | ezoterikus |
Jellemző kiterjesztés | .b, .bf |
Megjelent | 1993 |
Tervező | Urban Müller |
Fejlesztő | Urban Müller |
Hatással volt rá |
|
Befolyásolt nyelvek | P′′, FALSE |
A Brainfuck programozási nyelv egy nyolc utasítást tartalmazó Turing-teljes[1] (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
- ↑ BME EET: BF, 2009. január 17. [2012. június 27-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. július 1.)
További információk
- JavaScript nyelven írt BrainFuck értelmező.
- Webes BrainFuck értelmező.
- Másik webes BrainFuck értelmező és gépikódú fordító.[halott link]
- Brainfuck – An Eight-Instruction Turing-Complete Programming Language
- Brainfuck interpreter with integrated debugger (IDE) for Windows
- bkil ASCII BF interpretere Archiválva 2006. február 23-i dátummal a Wayback Machine-ben
Informatikai portál • összefoglaló, színes tartalomajánló lap