Viele Menschen haben Schwierigkeiten oder Frustrationen mit den Programmiersprachen, die sie jeden Tag benutzen. Manche wollen, dass Dinge abstrakter behandelt werden, während andere es nicht mögen, Funktionen zu implementieren, die sie als "Standard" wünschen. Egal, ob Sie ein IT-Profi oder nur ein Hobbyist sind, viele Male möchten Sie vielleicht eine neue Programmiersprache erstellen.

Schritte

  1. 1 Machen Sie sich mit Technologie vertraut. Sie können keine Programmiersprache erstellen, wenn Sie nicht wissen, wie man einen Computer benutzt.
  2. 2 Machen Sie sich mit der Terminologie vertraut. Compiler-Autoren verwenden häufig eine unbekannte Terminologie. Lesen Sie Compiler, bevor Sie fortfahren. Achten Sie darauf, alles zu wissen, was Sie wissen müssen.
  3. 3 Entscheiden Sie, welches Problem Ihre Sprache löst. Behandelt es ein domänenspezifisches Problem oder ist es eine allgemeine Sprache?
  4. 4 Denken Sie über die Semantik Ihrer Sprache und die Konzepte davon nach.
    • Werden Sie den direkten Zeigerzugriff erlauben oder nicht?
    • Was sind die Datentypen deiner Sprache?
    • Ist es eine statische oder dynamische Sprache?
    • Was ist dein Speichermodell? Verwenden Sie einen Garbage Collector oder eine manuelle Speicherverwaltung? (Wenn Sie einen Garbage Collector verwenden, bereiten Sie sich vor, einen zu schreiben oder einen vorhandenen auf Ihre Sprache anzupassen.)
    • Wie gehen wir mit Nebenläufigkeit um? Verwenden Sie ein einfaches Threading / Locking-Modell oder etwas Komplexeres wie Linda oder das Actor-Modell? (Seit heute haben Computer mehrere Kerne.)
    • Sind in der Sprache primitive Funktionen eingebettet oder kommt alles aus einer Bibliothek?
    • Was ist das Paradigma oder Paradigma deiner Sprache? Funktional? Objektorientierte? Prototyp (wie JavaScript)? Aspekt-orientiert? Vorlage orientiert? Oder etwas ganz Neues?
    • Wie wird Ihre Sprache mit vorhandenen Bibliotheken und Sprachen (hauptsächlich C) interagieren? Dieser Punkt ist wichtig, wenn Sie eine domänenspezifische Sprache erstellen.
    • Schließlich werden einige der Antworten auf diese Fragen im zweiten Schritt beantwortet und helfen Ihnen, den nächsten Schritt zu beantworten.
  5. 5 Denken Sie an bestimmte Aufgaben, die jemand mit Ihrer Sprache ausführen möchte. Zum Beispiel "möchten sie vielleicht einen Roboter anweisen, einer Linie zu folgen" oder "sie möchten vielleicht relativ portable Desktop-Programme darin erstellen" oder "sie wollen vielleicht Web-Anwendungen damit erstellen".
  6. 6 Experimentieren Sie mit den Syntax-Ideen (der Text der Sprache) für die obigen Beispiele.
    • Achten Sie darauf, Ihre Sprache in der kontextfreien Sprachkategorie oder etwas darin zu behalten. Ihr Parser-Generator und Sie werden es später zu schätzen wissen.
  7. 7Schreiben Sie eine formale Grammatik für die Syntax aus.
  8. 8 Entscheiden Sie, ob die Sprache interpretiert oder kompiliert werden soll. Das bedeutet, dass Ihr Benutzer in der Regel Ihr Programm in einem Editor bearbeiten und direkt auf dem Interpreter ausführen wird. In der Welt der Kompilierung wird Ihr Benutzer Ihr Programm bearbeiten, es kompilieren, die resultierende ausführbare Datei irgendwo speichern und ausführen.
  9. 9 Schreiben Sie den Front-End-Scanner und Parser oder finden Sie ein Tool, das Ihnen dabei hilft.
    • Denken Sie darüber nach, wie Ihr Compiler / Interpreter Ihren Benutzer vor fehlerhaften Programmen und Syntaxfehlern warnt.
  10. 10 Verwenden Sie die Parserinformationen, um den Objektcode oder eine Zwischendarstellung zu schreiben. Lassen Sie den Parser einen AST erstellen, erstellen Sie dann Ihren Objektcode aus dem AST, indem Sie den dreifachen Adresscode oder dessen SSA verwenden, und erstellen Sie dann eine Symboltabelle, um Ihre Funktionen, globalen Variablen usw. zu definieren.
    • Abhängig von Ihrer Sprache sollten Sie auch virtuelle Zeigertabellen oder Informationstabellen für Ihre Klassen erstellen (um Reflektion oder RTTI zu unterstützen).
  11. 11Schreiben Sie den Executor oder den Codegenerator, der alles zusammenbindet.
  12. 12 Schreiben Sie viele Testprogramme, um die Sprache zu testen.
    • Sie möchten Programme erstellen, die die Belastungen Ihrer formalen Grammatik betonen, um zu sehen, dass Ihr Compiler alles akzeptiert, was in Ihrer Definition enthalten ist, und alles zurückweist, was außerhalb dieser Definition liegt.
  13. 13Überlegen Sie, wie der Benutzer seine eigenen Programme debuggen wird.
  14. 14 Wenn Ihre Sprache eine Standardbibliothek verwendet, sollten Sie sie schreiben. Zusammen mit einem Garbage Collector oder anderen Laufzeitfunktionen, wenn Sie es brauchen.
    • Insbesondere wenn Sie einen Compiler schreiben, benötigen Sie den Code, den das Betriebssystem ausführen wird, um mit der Ausführung des Benutzercodes zu beginnen (z. B. alle globalen Variablen zuweisen).
  15. 15 Veröffentlichen Sie Ihre Sprache zusammen mit der Spezifikation dafür und einigen Beispielen, was Sie darin tun können.
    • Vergessen Sie nicht, zu dokumentieren, wie Sie in vorhandene Bibliotheken, Sprachen und die Laufzeitfunktionen und / oder die Standardbibliothek integrieren können.