Brainfuck
| Brainfuck | |||
|---|---|---|---|
| Tilblivelse | 1993 | ||
| Paradigme | Multi-paradigme: Esoteric programming, imperativ programmering | ||
| Utviklet av | Urban Müller | ||
| Filendelse(r) | .b, .bf | ||
| Påvirket av | |||
| P′′, FALSE | |||
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 [1] Arkivert 30. september 2007 hos Wayback Machine.. 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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.