Brainfuck Interpreter
Übersicht

feiderehemals "Decelion"Betreff: Brainfuck Interpreter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, von mir gibts auch mal wieder was zu hören.
Nicht mehr in Blitz Basic (meiner Meinung nach trotz der Einschränkungen im Bereich Objektorientierung aber immer noch eine schöne Sprache), sondern in C++, deswegen auch kein Thread im Projekte-Bereich. Dennoch, wen es interessiert: Hier gibt es einen von mir in C++ geschriebenen Brainfuck-Interpreter mit zwei Beispielen. Ohne Binarys, kompilieren müsst ihrs selbst.. aber ist eh nur eine Sourcecode-Datei und es gibt eine Makefile ![]() Viel Spaß beim rumprobieren Dece (feider) EDIT: "Ohne pics saug ich nix" (Das kommt sicher früh genug ![]() Nun.. es ist ein Kommandozeilenprogramm. Die komprimierte Datei ist 1,8 Kilobyte groß und enthält noch 2 Beispiele. Der Quellcode ist einsehbar, insofern kann es keine Schadsoftware sein. Ich wüsste nicht, was ich da als Bilder hochladen sollte ![]() |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du redest auf deiner Homepage von einem Compiler, aber es ist ja doch nur ein Interpreter. (Hatte mich schon ein wenig auf selbstgehacktes Assembler gefreut ![]() Ansonsten bin ich sehr beeindruckt wie schön strukturiert und simpel ein BF-Interpreter ausschauen kann. Der Code ist in die Sammlung aufgenommen, danke! |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, stimmt.. Sollte eigentlich Interpreter stehen. Peinlich.
Das Endziel ist zwar ein Compiler, aber das dauert noch etwas ![]() (Soll eine Übung für mich werden, mit ELF und Windows Binaries umzugehen) Freut mich aber, dass er dir gefällt! Sollte dich etwas Brainfuck-Wahn überfallen, könntest du uns hier deine Ergebnisse präsentieren ![]() |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ein BF-Interpreter ist so etwa das Standardbeispiel für Interpreter. Findet man im Internet zu Hauf. Ist ja eigentlich auch ziemlich einfach :/ Den schreibt man (selbst in BB) in 100 Zeilen.. BlitzBasic: [AUSKLAPPEN] Const MEM_SIZE = 256 Was meiner Meinung nach viel interessanter wäre, ist das Gegenteil. Eine Funktion die einen String in einen möglichst effizienten BF-Code umsetzt. Sowas habe ich bisher noch nicht gesehen, wäre aber wesentlich interessanter. Würde mich mal interessieren, ob jemand sowas kennt? MfG, Darth |
||
Diese Signatur ist leer. |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich sass mal eine Zeit lang an einem optimierenden Brainfuck-Compiler, jedoch gab ich es nach zig Segfaults des Outputs irgendwann auf. Es kompilierte von BF nach Assembler in AT&T Syntax, und benutzte dann den GNU-Assembler um das ganze zu assemblen.
Die Optimierungen waren aber wirklich sehr einfach gestrickt. Schwieriger ist meiner Ansicht nach Schleifen wegzuoptimieren, welche einfach nur eine gewisse Anzahl an Zahlen in eine Zelle schreiben. Immerhin kennt BF keine Konstanten, was dem Compiler also schon mal keinen Hinweis auf solche Konstrukte bietet. Interpreter ist aber wahrlich easy. Jemand hat mir letztlich einen gezeigt, welcher in C geschrieben war, etwa 20 Zeilen lang und keine einzige If-Condition oder Switch-Dingsbums benutzte. Das sah krank aus. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt ja auch Versuche ans Limit von C zu gehen und einen Brainfuck-Compiler mit so wenig Zeichen wie möglich zu programmieren. Die sind dann nur noch drei Zeilen lang und sehr unüberschaubar.
Ich habe Mal eine Art JIT-Compiler für Brainfuck geschrieben. Der den Code in x86 opcodes umwandelt, die auf den Heap schmeißt und dann ausführt (ich weiß: nicht besonders schön ![]() Vielleicht interessiert es ja den einen oder anderen: https://docs.google.com/?pli=1...ollections Edit: Mein Code ist nicht C++, sondern reines C. Übrigens: Beispiele zum Testen findet man einige im Brainfuck Archive und viele interessante auf bf-hacks.org. Am besten testet man auch "The Lost Kingdom", ein Textadventure in Brainfuck, das aus 2 Megabyte Brainfuck-Code besteht - um die Geschwindigkeit zu testen: http://jonripley.com/i-fiction...domBF.html Natürlich sind die 2 MB nicht handgeschrieben ![]() Übrigens 2.0 (zu deinem Code): 1. Beim Brainfuck-Interpreter passt der Rekursive Abstieg besonders gut, um Schleifen zu implementieren. Vielleicht hätte ich in meinem Artikel eher einen Brainfuck-Interpreter statt einen Matheparser vorstellen sollen ![]() 2. Ich denke, du bist da bei strcpy(filename, argv[1]) nicht gegen Pufferüberläufe abgesichert ^^ Das dürfte im Moment nichts heißen, weil du nur eine main-Funktion hast, aber da sollte man aufpassen ![]() 3. In C(++) haben for-Schleifen, im Gegensatz zu BASIC, viel mehr Möglichkeiten und würden auch deinen Code kürzen. Kurz heißt in dem Fall nicht, schwieriger lesbar. Ich wette, wenn man in C/C++ gut eingelesen ist oder oft damit zu tun hat, fällt es einem sogar leichter, die Zusammenhänge zu verstehen, wenn für Zählschleifen for-Schleifen verwendet werden. Alles natürlich nur Tipps und kein Muss. Weiterhin viel Erfolg und Spaß beim C++-Programmieren. Und nicht zuviel von BB/BMax fernbleiben ![]() mfg Thunder |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group