www.wikidata.de-de.nina.az
Befunge ist eine esoterische Programmiersprache von Chris Pressey die ahnlich wie Forth Stack orientiert ist Die Programme basieren auf einem 2 dimensionalen Schema Der Quelltext besteht aus ASCII Zeichen in einer 80 25 Zeichen grossen Anordnung Chris Pressey erfand Befunge 1993 mit dem Ziel eine moglichst schwer kompilierbare Sprache zu definieren Eine Schwierigkeit fur Compiler stellt beispielsweise das p Kommando dar welches den Quellcode zur Laufzeit dynamisch verandern kann Interessant ist Befunge fur Forschung und Lehre praktische Anwendungen durfte es eher nicht geben Fur das Verstandnis von selbstmodifizierendem Code ist Befunge gut zum Experimentieren geeignet auch unkonventionelle Methoden zur Mehrfachverwendung von Programmcode lassen sich an Befunge gut darstellen Inhaltsverzeichnis 1 Die Instruktionen in Befunge 93 2 Beispiele 2 1 Addition zweier Zahlen 2 2 Hello World 2 3 Hello World ohne Schleife 2 4 Hello World Extended 2 5 Fibonacci Folge 3 Weitere Beispiele in Befunge 3 1 Conways Game of Life 3 2 Ein kastriertes Schachprogramm 3 3 BefBef 4 Literatur 5 WeblinksDie Instruktionen in Befunge 93 Bearbeiten0 9 Schiebe diese Ziffer auf den Stack Addition Hole a und b dann schiebe a b auf den Stack Subtraktion Hole a und b dann schiebe b a auf den Stack Multiplikation Hole a und b dann schiebe a b auf den Stack Ganzzahl Division Hole a und b dann schiebe b a abgerundet auf den Stack Wenn a 0 frage den Benutzer nach dem Ergebnis Modulo Hole a und b dann schiebe den Rest der Ganzzahl Division von b a auf den Stack Wenn a 0 frage den Benutzer nach dem Ergebnis Logisches NICHT Hole den Wert wenn Null schiebe 1 sonst Null auf den Stack Grosser als Hole a und b dann schiebe 1 wenn b gt a sonst Null auf den Stack gt Gehe nach rechts lt Gehe nach links Gehe nach obenv Gehe nach unten Gehe in zufallige Richtung Hole einen Wert vom Stack gehe nach rechts wenn Wert 0 sonst nach links Hole einen Wert vom Stack gehe nach unten wenn Wert 0 sonst nach oben Starte String Modus Schiebe den ASCII Wert jedes Zeichens bis zum nachsten nach oben Dupliziere Wert auf der Spitze des Stacks Vertausche zwei Werte auf der Spitze des Stacks Hole einen Wert vom Stack Hole einen Wert vom Stack und gib ihn als Ganzzahl aus Hole einen Wert vom Stack und gib ihn als ASCII Zeichen aus Trampolin Ubergehe nachste Zelle g Hole y und x vom Stack dann schiebe den ASCII Wert des Zeichens an der Position x y im Programm auf den Stack p Hole y x und v vom Stack dann andere das Zeichen an der Position x y im Programm zu dem Zeichen mit dem ASCII Wert v amp Frage den Benutzer nach einer Zahl und schiebe diese auf den Stack Frage den Benutzer nach einem Zeichen und schiebe dessen ASCII Wert auf den Stack Beende ProgrammBeispiele BearbeitenAddition zweier Zahlen Bearbeiten 4 3 Der Quellcode ahnelt einem Forth Quellcode 4 und 3 werden nacheinander auf dem Stack abgelegt dann werden beide Zahlen vom Stack geholt addiert und dann das Ergebnis wieder auf dem Stack abgelegt Der Punkt ist die Anweisung die oberste Zahl des Stacks auszugeben Mit dem At Zeichen wird das Programm beendet Kommazahlen werden nicht unterstutzt Sobald z B 0 12 herauskommen wurde gibt das Programm 0 aus Das Gleiche nur mit Richtungsanderungen v gt v 4 gt 3 Ganz kompakt mit Fullzeichen v gt v 4 gt 3 Hello World Bearbeiten 0 dlroW olleH gt v Das erste signalisiert dass es sich um ASCII Code handelt Dann wird in Umgekehrter Reihenfolge Hello World zeichenweise in den Stack gelesen Das letzte schliesst den ASCII Strom ab Dann kommt eine Schleife bei denen gt v und die Richtungspfeile fur den Programmfluss darstellen und das Komma die Print Anweisung fur ein ASCII Zeichen darstellt Das Unterstrich stellt die While Bedingung dar die solange erfullt ist solange der letzte geholte Wert grosser 0 ist Hello World ohne Schleife Bearbeiten dlroW olleH v lt Hier wird dasselbe gemacht wie oben bloss wird statt einer Schleife die print Funktion einfach mehrmals hintereinander ausgefuhrt sodass der Stack am Ende leer ist Hello World Extended Bearbeiten 91 70 p v v p 173 lt v lt gt dlroW olleH gt v 1 g 17 lt p 17 70 g v amp p 173 lt Hier wird das Zeichen fur einen Zeilenumbruch ASCII Code 10 auf den Stack geschrieben ebenso ein Zahler mit dem Wert 3 Nun wird Hello World ausgegeben und der Counter um 1 verringert Diese Ausgabe wiederholt sich so lange bis der bei Counter 0 angelangt Ist dies der Fall so wird ein Zeilenumbruch ausgegeben der Counter auf 3 zuruckgesetzt und der Benutzer nach einer Zahl gefragt Ist diese Zahl vom Benutzer 0 so wird das Programm beendet ansonsten fangt das Programm wieder mit dem Ausgeben von Hello World an Fibonacci Folge Bearbeiten Diese Programme geben die Fibonacci Folge aus Je nach Interpreter werden nur die Zahlen bis 233 ausgegeben 0 1 gt 00 p 00 g v lt Zuerst wird die 0 auf den Stack gelegt und sofort ausgegeben Danach wird eine 1 auf den Stack gelegt Dann betritt das Programm die Endlosschleife Stack verdoppeln Wert ausgeben wieder verdoppeln oberstes Zeichen an Position 0 0 im Code speichern oberste Werte addieren Wert von Position 0 0 holen und die beiden obersten Werte vertauschen Das folgende Programm tut das gleiche nur wurde es fur genau eine Zeile geschrieben und ist daher etwas unubersichtlicher 0 1 gt lt lt lt lt 0 lt 0 lt p lt lt 0 lt 0 lt g lt lt Hier nochmal in gekurzter Form 0 1 gt g 00 00 p lt Hierbei gibt es Befehle fur die Hinrichtung und fur die Ruckrichtung Durch das Trampolin werden die Befehle aus der falschen Richtung ubersprungen Weitere Beispiele in Befunge BearbeitenConways Game of Life Bearbeiten Implementation des Game of Life von Dmitry M Litvinov v gt gt 31 g gt 51 gg 2 v 9 p BXY lt v 3 89 lt 21 gt 98 7 gt 0 lt 5 1 pg 15 lt 10 lt gt 25 51 g 1 v p lt 46 p 15 lt gt 31 gt 151 p gt 92 4 v v p 1 lt gt v gt 41 p gt 0 v 5 v g 1 g 15 1 g 14 lt 1 gt 41 g 1 51 gg v 1 p 1 v g 1 g 15 1 g 14 lt g 61 g gt 41 g 51 g 1 g v 14 1 v 4 g 1 g 15 g 14 lt 5 gt 4 gt 1 g 1 51 g 1 g v v 4 gg 15 1 g 14 lt gt v gt 1 g 1 51 g 1 g v g 8 v 14 25 4 88 lt 19 gt g 51 gg v 4 5 v lt v 2 3 v gt 3 v lt lt lt lt lt gt g 51 gp gt 51 gp gt v 14 lt g 14 lt Ein kastriertes Schachprogramm Bearbeiten Beispiel fur Eingabe a2a3 gt 9 gt 1 v gt v gt 1 4 v gt 1 5 v gt 01 g 1 802 g g a v gt 03 g 1 8 v RNBQKBNR v v 1 lt v4 1 v 5 lt gt n iw U gt g 40 lt 0 PPPPPPPP v p 00 1 g amp l t p lt gt G p gt 4 7 v gt K g g 408 1 g 30 lt gt p 7 4 5 gt 8 55 v 9 v v 5 lt 0 v lt gt v a v v p g lt 5 v 9 9 g 00 lt v 1 lt gt 5 v gt 0 lt lt gt 01 g 1 8 v gt 1 gt v v q 7 gp 90 5 e g lt lt v 01 p 9 p 8 pp g 20 lt gg 00 9 lt gt 55 v 7 lt gt 00 p 09 g 4 8 v 9 lt 8 9 p 00 1 g lt pppppppp lt gt gt gt 1 00 g 9 r n b q k b n r gt 04 g 9 p P v N v K v B lt 1 p 90 g 90 gg 00 lt g 30 pg 20 g 10 g lt gt 2 g 1 v gt 2 v 2 g lt v lt gt g v gt 02 p 8 8 1 01 p 0 v gt 01 g 02 g 9 g P 804 v 2 gp 40 lt gt 100 g 2 2 v v 2 lt Q v R gg 2 lt niw I gt v g 2 2 2 vv 0 v 2 4 g 00 lt lt gt lt v gt lt k v v g 10 1 lt gt gt 00 g 8 2 v gt g 2 2 2 1 0 v gt g 2 2 2 1 v 0 a v gg 40 g 3 lt 1 gt 03 p 0 04 gg a vv 0 v lt v 1 2 2 4 g 0 lt v v 2 4 g 00 lt p 80 1 g 8 lt gt 04 g 0 904 g gt g 03 p 04 gg v gt gt 0 vv lt lt gt 4 pg 8 8 v g 309 0 g 3 lt v 2 2 g 00 3 g 40 v lt v 0 g 1 lt gt 05 p 06 p 1 g 03 p 2 g 0 v v lt C h e ss p r og r a m o n B ef u n g e 9 3 gt 3 g 04 g 1 04 pg v 3 gt 3 p 02 g v v p 30 g 50 g 30 1 lt gt v Hungry dragon v 1 1 lt v p 3 v lt p lt v p 40 lt v 03 g 04 g 06 g 04 pg b y mt v e a t f r o x 25 d h s o r g lt lt lt lt lt lt lt lt lt BefBef Bearbeiten BefBef ist ein Befunge Interpreter geschrieben in Befunge von Wim Rijnders 028 p 038 p 108 p 018 p v v p 91 56 p 900 lt v v 1 lt gt lt v v v gt 09 g 19 g 19 gg 29 p p 29 g 28 g v v v p 91 g 91 g 81 p 90 g 90 g 8 0 pg 91 g 90 g 92 lt lt gt gt 38 g 7 p 38 g 1 38 p p 811 p 800 lt gt 28 g 28 p p 810 p 80 10 lt lt p 81 10 p 800 lt p 810 p 801 lt v gt lt 0 v 1 9 v 1 0 lt gt gt 1 v v gt 19 g 48 gp p 82 g 82 lt 0 dlroW olleH gt v g 7 1 g 83 v lt gt lt gt p v v 25 v 4 v 3 v 1 v 2 g 7 p 83 1 v g 83 lt 2 lt gt 5 v v 0 lt v 6 lt gt 6 v gt 09 g 48 p 1 gt gt gt 0 gt lt v gt 3 v lt gt v 4 5 v lt gt Literatur BearbeitenOliver Lau Hexenwerk Ein Pladoyer fur esoterische Programmiersprachen c t 22 07 S 192 199 Weblinks BearbeitenWASABI s A Superbly Asinine Befunge Interpreter Eine Open Source Befunge93 IDE YABI93 ein weiterer Befunge 93 Interpreter geschrieben in Java Tim s Befunge Compiler Programme in Befunge Befunge 93 Interpreter fur den Browser Abgerufen von https de wikipedia org w index php title Befunge amp oldid 225691979