Brainfuck
| brainfuck | |
| Paradigma | ezoterikus |
| Jellemző kiterjesztés | .b, .bf |
| Megjelent | 1993 |
| Tervező | Urban Müller |
| Befolyásolt nyelvek | P′′, FALSE |
A Brainfuck programozási nyelv egy nyolc utasítást tartalmazó Turing-teljes[1] (Turing-complete) 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).
Tartalomjegyzék |
A nyelv szerkezete [szerkesztés]
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 [szerkesztés]
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 [szerkesztés]
Az alábbi program kiírja az ASCII karakterkészletet; szerzője Jeffry Johnston, 2001
.+[.+]
Echo [szerkesztés]
Ez a program minden beadott karaktert kiír addig, míg egy ASCII 255 karaktert nem kap.
,+[-.,+]
Fordít [szerkesztés]
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 [szerkesztés]
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;
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.
Hello World [szerkesztés]
+++++ +++++
[
> +++++ ++
> +++++ +++++
> +++
> +
<<<< -
]
> ++ . 'H'
> + . 'e'
+++++ ++ . 'l'
. 'l'
+++ . 'o'
>++ . ' '
<< +++++ +++++ +++++ . 'W'
> . 'o'
+++ . 'r'
----- - . 'l'
----- --- . 'd'
> + . '!'
Egy sorban:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Jegyzetek [szerkesztés]
Források [szerkesztés]
További információk [szerkesztés]
- 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
- Brainfucked – Brainfuck Compiler
- bkil ASCII BF interpretere
Kapcsolódó szócikkek [szerkesztés]
- Ezoterikus programozási nyelvek – avagy en:Esoteric programming language az angol Wikipédián
- Malbolge programozási nyelv

