Brainfuck Tartalomjegyzék A nyelv szerkezete Példaprogramok Hello World Két megadott byte összeadása Jegyzetek Források További információk Kapcsolódó szócikkek Navigációs menüellenőrizveBFeredetibőlJavaScript nyelven írt BrainFuck értelmező.Webes BrainFuck értelmező.Másik webes BrainFuck értelmező és gépikódú fordító.halott linkBrainfuck – An Eight-Instruction Turing-Complete Programming LanguageBrainfuck interpreter with integrated debugger (IDE) for Windowsbkil ASCII BF interpretere
Ezoterikus programozási nyelvek
programozási nyelvezoterikus programozási nyelvangolAmigafordítóprogramotASCIIpolyglot
Brainfuck
Ugrás a navigációhoz
Ugrás a kereséshez
brainfuck | |
Paradigma | ezoterikus |
Jellemző kiterjesztés | .b, .bf |
Megjelent | 1993 |
Tervező | Urban Müller |
Fejlesztő | Urban Müller |
Hatással volt rá | .mw-parser-output .plainlist ulline-height:inherit;list-style:none none;margin:0;padding:0.mw-parser-output .plainlist ul limargin-bottom:0
|
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).
Tartalomjegyzék
1 A nyelv szerkezete
2 Példaprogramok
2.1 ASCII
2.2 Echo
2.3 Fordít
2.4 TOP-BOT
3 Hello World
4 Két megadott byte összeadása
5 Jegyzetek
6 Források
7 További információk
8 Kapcsolódó szócikkek
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.)
Források
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
Kapcsolódó szócikkek
- Ezoterikus programozási nyelv
- Malbolge programozási nyelv
Kategória:
- Ezoterikus programozási nyelvek
(RLQ=window.RLQ||[]).push(function()mw.config.set("wgPageParseReport":"limitreport":"cputime":"0.180","walltime":"1.701","ppvisitednodes":"value":1073,"limit":1000000,"ppgeneratednodes":"value":0,"limit":1500000,"postexpandincludesize":"value":10420,"limit":2097152,"templateargumentsize":"value":2273,"limit":2097152,"expansiondepth":"value":12,"limit":40,"expensivefunctioncount":"value":1,"limit":500,"unstrip-depth":"value":0,"limit":20,"unstrip-size":"value":12299,"limit":5000000,"entityaccesscount":"value":1,"limit":400,"timingprofile":["100.00% 1664.272 1 -total"," 7.12% 118.441 1 Sablon:Programozási_nyelv_infobox"," 3.04% 50.535 1 Sablon:Infobox/Kép"," 2.32% 38.618 1 Sablon:Halott_link"," 1.96% 32.679 14 Sablon:Infobox/Általános"," 1.95% 32.490 1 Sablon:Fix"," 1.95% 32.408 1 Sablon:Jegyzetek"," 1.77% 29.523 2 Sablon:Category_handler"," 1.69% 28.097 9 Sablon:Wikidata"," 1.69% 28.045 2 Sablon:References"],"scribunto":"limitreport-timeusage":"value":"0.052","limit":"10.000","limitreport-memusage":"value":1549295,"limit":52428800,"cachereport":"origin":"mw1254","timestamp":"20190823064036","ttl":2592000,"transientcontent":false););"@context":"https://schema.org","@type":"Article","name":"Brainfuck","url":"https://hu.wikipedia.org/wiki/Brainfuck","sameAs":"http://www.wikidata.org/entity/Q244627","mainEntity":"http://www.wikidata.org/entity/Q244627","author":"@type":"Organization","name":"Contributors to Wikimedia projects","publisher":"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":"@type":"ImageObject","url":"https://www.wikimedia.org/static/images/wmf-hor-googpub.png","datePublished":"2004-03-09T17:33:33Z","dateModified":"2019-06-03T17:01:13Z"(RLQ=window.RLQ||[]).push(function()mw.config.set("wgBackendResponseTime":153,"wgHostname":"mw1244"););