Ich habe endlich begonnen, die Komplexität zu verstehen, die hinter dem Erstellen eines Interpreters und eines Compilers steckt. Ich habe mehrere Versionen von TinyBasic, 1964 (Dartmouth) Basic und meine eigenen Erweiterungen für diese Sprachen erstellt, bevor ich zu diesem Punkt komme. Das jüngste Projekt ist eines, das ich Open Source Basic nenne ... weil ich mir keine anderen Merkmale der Sprache vorstellen konnte, die die Leute interessieren würden. In der Lage zu sein, die Quelle der Sprache zu öffnen und zu verstehen, wie einige komplexe Dinge getan werden (wie gescannt, analysiert, interpretiert und kompiliert wird)
Open Source Basic wird zunächst in eine stapelbasierte Sprache interpretiert. Diese stapelbasierte Sprache wird dann sofort interpretiert und ausgeführt oder in eine ausführbare CLR-Datei umgewandelt.
Meine Fragen laufen alle darauf hinaus:
- Was sind die grundlegenden Funktionen / Konstrukte einer Basic-basierten Sprache? Ich habe bereits diese grundlegenden Konstrukte: Zuweisungen, Ausdrücke, Variablen, einige Funktionen (Random, ToUpper, ToLower), Looping (für und während / bis), If (Block und einzeilig) Sonst Entscheidungen, konsolenbasierte Eingabe (Eingabe) ) und Ausgabe (Drucken) und Unterroutinen (noch ohne Parameter).
- Wenn ich mit dem Hinzufügen der Grundkonstrukte zu meiner Sprache fertig bin - wie soll ich mich verzweigen? In welche Domain (s)? Mit anderen Worten, welche Richtung (en) sollte meine Open Source-Basissprache einschlagen, wenn alle generischen Konstrukte funktionieren?
Vielen Dank für Ihre Zeit,
Dominick
quelle
Antworten:
Meine Erfahrung mit frühem BASIC auf dem Commodore [Vic-20, C-64] erweckte den Eindruck, dass Zeilennummern ein zentrales "Merkmal" von BASIC waren. Es scheint, als würden sie in modernen Implementierungen nicht mehr verwendet, was für mich ein Nachteil ist, da ich BASIC in erster Linie als Lernsprache betrachte, aus der ich auf etwas anderes springen kann.
quelle
Auf jeden Fall ein nobles Unterfangen, aber ich denke, Sie haben Ihre Prioritäten umgekehrt.
Ihr erstes Anliegen sollten die "Domain" -Probleme sein, auf die Ihre Sprache abzielt. Aus diesem Grund wird es in erster Linie als "domänenspezifische Sprache" bezeichnet. Ein DSL ist nur dann tolerierbar, wenn es klein, einfach und sehr eng fokussiert ist, um bestimmte Probleme wie ein Messer durch Butter zu lösen.
Nachdem Sie die Domäne identifiziert haben und wie Ihre Sprache in der Domäne funktioniert, können Sie bestimmte Konstrukte oder Funktionen festlegen.
Schließlich kann es hilfreich sein zu überlegen, ob Sie ein internes oder externes DSL wünschen .
quelle
Ich habe eine Skriptsprache für eine CAE / FEA-Anwendung entwickelt und einige Funktionen, die ich für Endbenutzer nützlich fand, sind: Lokale und globale Variablen Matrizen mit dynamischer Zuordnung und Erweiterung Funktionen mit Argumenten und Referenzübergabe Strukturen (benutzerdefinierte Typen) Zusammen mit Die Funktionen, die Sie selbst erwähnt haben, sollten zunächst eine recht leistungsfähige Sprache sein. Dann entwickeln Sie nach Benutzerwunsch.
quelle
Es gibt verschiedene Funktionen, die hinzugefügt oder erweitert werden können, wenn sie bereits vorhanden sind, aber ...
... Grundlegende Programmiersprachen sind Skriptsprachen sehr ähnlich, und eine Funktion, die viele übersehen oder später hinzugefügt haben, waren Namespace oder Module.
C, C ++, PHP, Visual Basic wurden ohne Module / Namespaces gestartet und später hinzugefügt.
Die nächsten können Unterprogramme (Prozeduren oder Funktionen, die keinen Wert zurückgeben) und Funktionen (Unterprogramme, die einen speziellen Wert zurückgeben) sein.
quelle
Auf der Stack Overflow-Site gibt es eine nette Frage zu Ressourcen zum Verständnis von Compilern. Sie können auch einen Blick auf meine Compiler-Klassenseite werfen .
Angesichts der Funktionen, die Sie bereits erstellt haben, empfehle ich, drei Datentypen hinzuzufügen: int, string, boolean. Sie müssen drei Dinge tun, die jeweils etwas schwieriger sind als die vorherigen:
Wenn das gut geht, schlage ich vor, am Umfang zu arbeiten (lokal in Unterroutinen vs. global). Lassen Sie mich wissen, wenn Sie dazu einen Rat wünschen.
Viel Glück. Und genieße!
quelle