Ich habe heute Morgen einen Brainf**k für den C-Transpiler geschrieben. Insgesamt habe ich ungefähr eine Stunde gebraucht.
Das Ganze hat weniger als 50 C-Zeilen. Sie können es hier sehen.
Was ist Brainf**k?
Es ist eine esoterische Programmiersprache. Es wurde 1993 von einem Schweizer Studenten erfunden und ist so ziemlich das Minimum, das erforderlich ist, um als Turing-vollständig zu gelten.
Es ist auch einer der berühmtesten Esolangs, die es gibt.
Die Syntax ist äußerst minimal: Sie hat nur 8 Zeichen und der Rest wird ignoriert.
>++++++++[-]<.>++++[-]>++++++[-]++++++[-]>>++++[-] <p>Raten Sie mal, was das bewirkt. Raten Sie einfach.</p> <p>Es ist ein Hallo, Welt! Programm.</p> <p>Im Wesentlichen erhält man in Brainf**k ein 30.000-Byte-Array und einen Cursor. Sie können den Cursor mit > bewegen. und <. sie k den speicher mit und wodurch der wert in zelle erh oder verringert wird. schleifen erstellen. schlie ..> ein einzelnes Byte als Eingabe lesen und den Wert der aktuellen Zelle ausdrucken </.></p> <pre class="brush:php;toolbar:false">> ; Increments cursor position <p>Das ist so ziemlich alles über Brainf**k.<br> Ich habe schon früher mehr funktionale Programme in <em>Assembly</em> geschrieben.</p> <h2> Warum? Nur warum? </h2> <p>Ich habe diesen Compiler ausschließlich geschrieben, weil mir langweilig war und ich eine Menge Interpreter gefunden habe, also dachte ich, die Welt braucht einen genialen Compiler.</p> <blockquote> <p>Obwohl, zugegebenermaßen, wenn Sie einen wirklich guten Brainf**k-Compiler wollen, schauen Sie sich diesen an<br> dieses.</p> </blockquote> <h3> Warum C? </h3> <p>Viele Gründe:</p>
- Ich möchte mehr Übung damit
- Es geht schnell
- Es ist größtenteils tragbar
- Es ist weit verbreitet
- Ich brauchte sowieso nicht viel Code.
Und noch ein letzter Grund: Ganzzahlüberlauf. Normalerweise ist das eine schlechte Sache, die die Leute hassen. Dies ist wahrscheinlich der Grund, warum Unit-Tests (ugh) erfunden wurden. Aber Brainf**k ist anders. Die Zahlen auf dem Speicherband haben eine Obergrenze von 255, und wenn sie diese überschreiten, wird erwartet, dass sie auf 0 zurückgesetzt werden. Wenn der Wert unter 0 fällt, soll er außerdem auf 255 zurückgesetzt werden. C führt dies selbstständig aus ; Ich musste dafür keinen Code schreiben.
Wie?
Eine übergeordnete Übersicht:
- Code aus einer Datei oder von stdin in den Speicher lesen
- Konvertieren Sie jedes Zeichen in C-Code
- Drucken Sie den fertigen C-Code aus.
Es liest Brainf**k-Code aus einer Datei in Code[].
Dann wird ein einfaches C-Programm eingerichtet:
#include <stdio.h> int main() {char t[30000]={0};int p=0; </stdio.h>
Vielleicht ist Ihnen aufgefallen, dass eine schließende Klammer fehlt. Das liegt daran, dass diesem char[].
mehr Code hinzugefügt wirdFalls Sie sich fragen: char t[30000] ist der Speicher, der Ihnen gegeben wird. Ich habe t als Kurzform für „Tape“ verwendet, es aber gekürzt, da diese Programme nicht für Menschen lesbar sein sollen.
Als nächstes wird das Code-Array durchlaufen, bei dem es sich um ein Array aus einzelnen Zeichen handelt. Für jedes Zeichen wird es in C-Code konvertiert:
character | becomes |
---|---|
> | p |
p-- | |
- | t[p]-- |
t[p] | |
. | putchar(t[p]) |
, | t[p]=getchar() |
[ | while(t[p] != 0) |
] | } |
Sie können oben sehen, um zu verstehen, was diese Symbole bewirken.
Diese Werte werden zur Programmausgabe hinzugefügt, die gültigen C-Code enthält.
Zuletzt wird dieser Code zur endgültigen Ausgabe hinzugefügt:
>++++++++[-]<.>++++[-]>++++++[-]++++++[-]>>++++[-] <p>Dies ist das Ende des ausgegebenen Programms. Der Transpiler gibt diesen Code dann auf stdout aus, damit der Benutzer ihn nach Belieben bearbeiten kann.</p> <h2> Letzte Gedanken </h2> <p>Es gibt einige Verbesserungsvorschläge, die ich beim Schreiben dieses Artikels hatte. Ich glaube nicht, dass ich viel tun könnte, um es schneller zu machen, aber es gibt Dinge, die ich tun könnte, um es sicherer und besser zu machen.</p> <p>Den endgültigen Code können Sie hier sehen.</p> <p>Sie können auch jede Art von Beitrag leisten, wenn Sie möchten.</p> <p>Danke fürs Lesen!</p> </.>
Das obige ist der detaillierte Inhalt vonDer kleinste Transpiler, den Sie jemals sehen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

XML wird in C verwendet, da es eine bequeme Möglichkeit bietet, Daten zu strukturieren, insbesondere in Konfigurationsdateien, Datenspeicherung und Netzwerkkommunikation. 1) Wählen Sie die entsprechende Bibliothek wie TinyXML, Pugixml, RapidXML aus und entscheiden Sie nach den Projektanforderungen. 2) Verstehen Sie zwei Möglichkeiten zur Analyse und Erzeugung von XML: DOM ist für häufige Zugriff und Änderung geeignet, und SAX ist für große Dateien oder Streaming -Daten geeignet. 3) Bei der Optimierung der Leistung ist TinyXML für kleine Dateien geeignet, PugixML bietet gut in Speicher und Geschwindigkeit, und RapidXML eignet sich hervorragend bei der Verarbeitung großer Dateien.

Die Hauptunterschiede zwischen C# und c sind die Speichermanagement, die Implementierung der Polymorphismus und die Leistungsoptimierung. 1) C# verwendet einen Müllsammler, um den Speicher automatisch zu verwalten, während C manuell verwaltet werden muss. 2) C# realisiert den Polymorphismus durch Schnittstellen und virtuelle Methoden, und C verwendet virtuelle Funktionen und reine virtuelle Funktionen. 3) Die Leistungsoptimierung von C# hängt von der Struktur und der parallele Programmierung ab, während C durch Inline -Funktionen und Multithreading implementiert wird.

Die DOM- und SAX -Methoden können verwendet werden, um XML -Daten in C. 1) DOM -Parsen XML in Speicher zu analysieren, für kleine Dateien geeignet, können jedoch viel Speicher in Anspruch nehmen. 2) SAX-Parsing ist ereignisgetrieben und für große Dateien geeignet, kann jedoch nicht zufällig zugegriffen werden. Die Auswahl der richtigen Methode und Optimierung des Codes kann die Effizienz verbessern.

C wird aufgrund seiner hohen Leistung und Flexibilität in den Bereichen Spieleentwicklung, eingebettete Systeme, Finanztransaktionen und wissenschaftliches Computing häufig eingesetzt. 1) In der Spielentwicklung wird C für effizientes Grafikwiedergabe und Echtzeit-Computing verwendet. 2) In eingebetteten Systemen machen Cs Speicherverwaltung und Hardware -Steuerungsfunktionen die erste Wahl. 3) Im Bereich Finanztransaktionen entspricht die hohe Leistung von C den Anforderungen des Echtzeit-Computing. 4) Im wissenschaftlichen Computing werden die effizienten Funktionen der Algorithmus -Implementierung und der Datenverarbeitungsfunktionen von C vollständig reflektiert.

C ist nicht tot, aber in vielen Schlüsselbereichen floriert: 1) Spielentwicklung, 2) Systemprogrammierung, 3) Hochleistungs-Computing, 4) Browser und Netzwerkanwendungen, C ist immer noch die Mainstream-Wahl und zeigt seine starken Vitalitäts- und Anwendungsszenarien.

Die Hauptunterschiede zwischen C# und c sind Syntax, Speicherverwaltung und Leistung: 1) C# Syntax ist modern, unterstützt Lambda und Linq und C hält C -Funktionen und unterstützt Vorlagen. 2) C# verwaltet den Speicher automatisch, C muss manuell verwaltet werden. 3) C -Leistung ist besser als C#, aber auch die C# -Leistung wird optimiert.

Sie können die Bibliotheken TinyXML, PugixML oder LIBXML2 verwenden, um XML -Daten in C. 1) XML -Dateien zu verarbeiten: Verwenden Sie DOM- oder SAX -Methoden, DOM ist für kleine Dateien geeignet und SAX ist für große Dateien geeignet. 2) XML -Datei generieren: Konvertieren Sie die Datenstruktur in das XML -Format und schreiben Sie in die Datei. In diesen Schritten können XML -Daten effektiv verwaltet und manipuliert werden.

Die Arbeit mit XML -Datenstrukturen in C kann die Bibliothek mit TinyXML oder Pugixml verwenden. 1) Verwenden Sie die PugixML -Bibliothek, um XML -Dateien zu analysieren und zu generieren. 2) Behandeln Sie komplexe verschachtelte XML -Elemente wie Buchinformationen. 3) Optimieren Sie den XML -Verarbeitungscode und es wird empfohlen, effiziente Bibliotheken und Streaming -Parsen zu verwenden. In diesen Schritten können XML -Daten effizient verarbeitet werden.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.
