Brainfuck

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:
TegnMening>ø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

Kategori:Programmeringsspråk