**Brainfuck** er et programmeringsspråk kjent for sin ekstreme minimalisme. Det ble designet for å utfordre og underholde programmerere, og passer ikke for praktisk bruk.

Språkdesign
-----------

Urban Müller utviklet Brainfuck rundt 1993 i den hensikt å skape et språk som kunne bli implementert med en minst mulig kompilator. Det har blitt skrevet flere Brainfuck-kompilatorer på mindre enn 200 bytes. Den klassiske distribusjonen er Müllers versjon 2, som inneholder en kompilator for Amiga, en tolker, eksempelprogrammer, og et lesmeg (readme)-dokument.

Språket består av åtte kommandoer, listet nedenfor. Et Brainfuck-program er en rekke av disse kommandoene, noen ganger med andre tegn imellom (som blir ignorert). Kommandoene blir kjørt sekvensielle, med unntak notert nedenfor.

Brainfuck-språket bruker en enkel maskinmodell som utenom selve programmet består av en rekke med 30,000 byte-celler initialisert til null, en bevegelig peker i rekken og to strømmer av bytes for inn- og utdata (vanligvis koblet til et tastatur og en skjerm, og med ASCII tegnsettet).

### Kommandoer

De åtte språkkommandoene, hver bestående av ett enkelt tegn, er som følger:

| Tegn | Mening |
| --- | --- |
| `>` | øk pekeren (til å peke på nærmeste celle til høyre). |
| `<` | minsk pekeren (til å peke på nærmeste celle til venstre). |
| `+` | øk (med én) byten på pekeren. |
| `-` | minsk (med én) byten på pekeren. |
| `.` | skriv ut byten på pekeren. |
| `,` | aksepter én byte med inndata og lagre den i byten på pekeren. |
| `[` | hopp forover til kommandoen etter den tilhørende `]` hvis byten på pekeren er null. |
| `]` | hopp tilbake til kommandoen etter den tilhørende `[` hvis byten på pekeren ikke er null. |

Eksempler
---------

### Hello World!

Det følgende programmet skriver «Hallo Verden!» og en newline:

```
++++++++++
[
   >+++++++>++++++++++>+++>+<<<<-
]
>++. print 'H'
>---. print 'a'
+++++++++++. 'l'
. 'l'
+++. 'o'
>++. mellomrom
<<++++++++++++++. 'V'
>----------. 'e'
+++++++++++++. 'r'
--------------. 'd'
+. 'e'
+++++++++. 'n'
>+. '!'
>. newline
```

For lesbarhetens skyld har koden blitt spredt utover mange linjer og kommandoer blitt lagt til. Brainfuck behandler alle tegn utenom `+-<>[],.` som kommentarer, så ingen spesiell syntaks for kommentarer trengs. Koden kunne like gjerne blitt skrevet som:

```
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>---.+++++++++++..+++.>++.<<++++++++++++++.>--- 
-------.+++++++++++++.--------------.+.+++++++++.>+.>.
```

### Trivielt

#### Enkel løkke

```
,[.]
```

En løkke som mottar tekst fra tastaturet og skriver det til skjermen.

#### Pekermanipulasjon

```
>,[.>,]
```

En versjon av det forrige som i tillegg lagrer alle inndata i rekken med bytes ved å flytte pekeren hver gang.

#### Addisjon

```
[->+<]
```

Denne legger byten på den nåværende posisjonen til byten på den neste posisjonen.

#### Kopiering

```
[->>+<<]>>[-<+<+>>]
```

Denne kopierer byten fra den nåværende posisjonen til neste posisjon, ved å bruke en tredje posisjon som temporær byte.

Eksterne lenker
---------------

* Brainfuck interpreter with integrated debugger (IDE) for Windows

| * v
* d
* r
Programmeringsspråk |
| --- |
| Tidslinje |
| A# **·** ActionScript **·** Ada **·** Alef **·** ALGOL **·** ALGOL 58 **·** ALGOL 60 **·** ALGOL 68 **·** ALTRAN **·** APL **·** AppleScript **·** Argus **·** Assembler **·** Autokode **·** awk **·** B **·** BASIC **·** BCPL **·** BETA **·** BitC **·** BLISS **·** Bourne Shell **·** C **·** C++ **·** C-- **·** CHILL **·** C# **·** C shell **·** Caml **·** Ch **·** Cilk **·** Cilk++ **·** Cilk Plus **·** Clarion **·** Clipper **·** CLISP **·** Clojure **·** CLU **·** COBOL **·** COMAL **·** Common Lisp **·** Concurrent C **·** Concurrent Euclid **·** Concurrent Pascal **·** C shell **·** D **·** Delphi **·** Dylan **·** ECMAScript **·** Eiffel **·** Emacs Lisp **·** Erlang **·** Euclid **·** F\* **·** F# **·** Forth **·** Fortran **·** GNU Common Lisp **·** GNU Pascal **·** Go **·** Haskell **·** HyperTalk **·** Incr Tcl **·** INTERCAL **·** Interlisp **·** Java **·** JavaScript **·** JRuby **·** LaTeX **·** Legoscript **·** LilyPond **·** Limbo **·** Lisp **·** LPC **·** Lua **·** Lynx **·** Mary **·** MATLAB **·** Mesa **·** ML **·** MML **·** Modula **·** Modula-2 **·** MUMPS **·** Objective-C **·** Objective-C++ **·** OCaml **·** OpenVera **·** O'Haskell **·** Pascal **·** Perl **·** PHP **·** Pike **·** PL/I **·** Plankalkül **·** PLEX **·** Prolog **·** Protel **·** Pure Data **·** Python **·** R **·** Ratfor **·** REXX **·** RTL/2 **·** Ruby **·** Rust **·** SAS **·** Scala **·** Scheme **·** Scratch **·** Simula **·** SML **·** Smalltalk **·** SNOBOL **·** Tcsh **·** Tcl **·** TECO **·** TOM **·** Turbo Basic **·** Turbo Pascal **·** Verilog **·** Visual Prolog **·** Turing **·** TypeScript **·** Vala **·** VHDL **·** Visual Basic **·** Flere.. |
| 
* Kategori **Kategori**

 |