Brainfuck on programmeerimiskeel, mille lõi Urban Müller eesmärgiga kirjutada maailma kõige väiksem kompilaator.
Loomulikult vajas selline kompilaator ka maailma väikseimat programmeerimiskeelt, milleks saigi Brainfuck.
Brainfuck | |
---|---|
Faililaiend | .b, .bf |
Paradigma | esoteeriline |
Väljalaskeaeg | 1993 |
Looja | Urban Müller |
Mõjutatud keeltest | P", FALSE |
Urban Mülleril õnnestus kirjutada Amiga OS 2.0-le kompilaator, mis oli vaid 200 baidi suurune. Brian Raiter kirjutas Linuxile kompilaatori, mis saavutas suuruse 171 baiti. Brainfucki kompilaatoreid ja interpretaatoreid on eri autorid kirjutanud paljudes keeltes. Eriti tasub ära märkida Brainfucki interpretaatoreid, mis on kirjutatud Brainfuckis. Eeskätt Daniel B. Cristofani kirjutatud imetilluke variant.
Brainfuck on minimalistlik keel. Programmis on kesksel kohal üks globaalne viitmuutuja, mis programmi alguses viitab esimesele positsioonile suures baitide massiivis (võib olla näiteks 30 kilobaidi suurune), mis kõik on vaikimisi seatud väärtusele null. Keeles on kaheksa käsku, mis kõik koosnevad vaid ühest sümbolist:
Hello world programm Brainfuckis:
++++++++[->++++>+>>++>++>>+++>+<<<<<< <<]>[->++>+++>+++>+>+>++<<<<<<]>.>+++ ++.>----..+++.>----.>.>-.<<<.+++.---- --.<-.>>>+.>>++.
Tegu on väga lihtsa C++ programmiga, mis näitab Brainfucki koodi väljundit seda kompileerimata.
#include #include using namespace std; int main() { unsigned char buffer[30000] = {0}; char *ptr = "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++."; unsigned char *ptr2 = buffer; stack<char *> pos_stack; while(*ptr && *ptr != EOF) { if(*ptr == '+') ++*ptr2; if(*ptr == '-') --*ptr2; if(*ptr == '>') ++ptr2; if(*ptr == '<') --ptr2; if(*ptr == ',') *ptr2 = cin.get(); if(*ptr == '.') cout << *ptr2; if(*ptr == '[') pos_stack.push(ptr + 1); if(*ptr == ']' && *ptr2 != 0) ptr = pos_stack.top(); else { if(*ptr == ']' && *ptr2 == 0) pos_stack.pop(); ptr++; } fflush(stdin); } return 0; }
This article uses material from the Wikipedia Eesti article Brainfuck, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Sisu on kasutatav litsentsi CC BY-SA 4.0 tingimustel, kui pole öeldud teisiti. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Eesti (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.