Angenommen, ich wollte meine eigene Programmiersprache erstellen. Unter der Annahme, dass ich alle Entscheidungen darüber getroffen habe, wie es aussehen und sich verhalten soll, muss ich nur einen Compiler dafür schreiben?
Ist der Java-Code auf hoher Ebene etwas anderes als nur Text, und dieser Text hat das richtige Format, damit der Compiler ihn akzeptiert und in etwas anderes umwandelt?
Meine Frage ist, ob die Erstellung einer Programmiersprache über einen Compiler erfolgt. High-Level ist in Ordnung.
System.out.println()
Java, weil der Java-Compiler dies akzeptiert, oder funktioniert hier etwas anderes?Antworten:
Die kurze Antwort lautet nein .
Sie können sich eine Programmiersprache als einen mathematischen Formalismus vorstellen, der zum Ausdrücken von Berechnungen verwendet wird. Ein Compiler / Interpreter ist nur ein Teil einer tatsächlichen Software, die diese Berechnung ausführt, und sollte nicht als Sprachspezifikation dienen.
Abgesehen davon sollten Sie neben der lexikalischen und syntaktischen Spezifikation einer Sprache auch die semantische Spezifikation definieren, dh was bedeutet ein (syntaktisch korrektes) Programm, das in Ihrer Sprache geschrieben ist, tatsächlich? Die offensichtliche Semantik ist zunächst die operative Semantik , bei der die Bedeutung eines Programms in Bezug auf die tatsächliche Ausführung des Programms angegeben wird. Das heißt, es definiert (mathematisch) genau, wie Programme ausgeführt werden. Zusätzlich zu dieser Semantik sollten Sie einen tatsächlichen Compiler / Interpreter mit Optimierungen usw. erstellen.
Wenn Sie die vollständige Betriebssemantik Ihrer Sprache angeben, erhalten Sie eine formale Sprachdokumentation und können Ihre Sprache bis ins kleinste Detail verstehen. Außerdem können Sie einige Aspekte der Sprache formell begründen. Das Aufschreiben der operativen Semantik ist wirklich eine gute Angewohnheit.
Es gibt auch andere nützliche Semantiken, wie z. B. axiomatische , denotationale und Spielesemantik . Sie sind jedoch fortgeschrittener und gelangen normalerweise nicht in einen Compiler / Interpreter.
quelle
Treffen Sie alle Entscheidungen darüber, wie die Sprache aussehen und handeln soll soll, erstellen Sie Ihre eigene Programmiersprache. Sie benötigen keinen Compiler oder Interpreter, um eine Programmiersprache zu erstellen. Sie benötigen keinen Compiler oder Interpreter, um Programme in Ihrer Programmiersprache zu schreiben.
Sie benötigen nur dann einen Compiler oder einen Interpreter, wenn Sie dies tatsächlich möchten die von Ihnen geschriebenen Programme ausführen .
Nein. Die Erstellung einer Programmiersprache erfolgt durch die Erstellung von zwei Regelsätzen:
Das ist es.
Es gibt Programmiersprachen, die nicht implementiert sind. Oder die lange Zeit keine Implementierung hatten.
Zum Beispiel schuf Konrad Zuse Mitte der 1940er Jahre Plankalkül, aber aufgrund des Krieges konnte er es nie umsetzen. Es wurde erstmals 1975 im Rahmen einer Dissertation umgesetzt. Es existierte aber sicherlich in den 1950er und 1960er Jahren.
LISP wurde ursprünglich als besser handhabbare Alternative zum λ-Kalkül für das Studium der Berechnung entwickelt. Es wurde von Steve Russell, einem Schüler von John McCarthy, implementiert. McCarthy selbst bezweifelte sogar, dass LISP überhaupt implementiert werden könnte!
APL wurde ursprünglich als Notation für den Mathematikunterricht entwickelt. Es wurde später erweitert, um als Spezifikationssprache für IBM System / 360 zu dienen. Die Implementierung erfolgte später, nachdem die Sprache bereits verwendet worden war.
PLANNER war eine sehr einflussreiche Sprache, die tatsächlich erst implementiert wurde, nachdem sie bereits andere Sprachen beeinflusst hatte. Es wurde 1969 entworfen und 1973 implementiert. Zu diesem Zeitpunkt hatte es bereits Smalltalk und Prolog beeinflusst (beide 1972).
Struktur und Interpretation der klassischen Mechanik ist ein Physiklehrbuch, das Schema anstelle von Mathematik verwendet, um dynamische Systeme zu beschreiben. Die Tatsache, dass das Schema Dolmetscher und Compiler hat, ist für das Buch nicht wesentlich. Es wird als Sprache zur Vermittlung von Gedanken verwendet, nicht zum Ausführen von Programmen.
Wie Sie sehen, können Programmiersprachen auch ohne Implementierungen nützlich sein. "Programme sollten so geschrieben werden, dass Menschen sie lesen können und nur im Übrigen, damit Computer sie ausführen können", lautet ein berühmtes Zitat aus Struktur und Interpretation von Computerprogrammen. Programmiersprachen sind formale Sprachen zur eindeutigen Beschreibung komplexer Prozesse. Die Tatsache, dass ein Prozess, den ein Mensch genau genug beschreibt, um ihn zu verstehen, auch von einer Maschine ausgeführt werden kann, ist ein Nebeneffekt. Es ist eine sehr wünschenswerte, nützliche, starke Nebenwirkung, aber es ist eine Nebenwirkung.
Die allerersten "Programmiersprachen", λ-Kalkül, SKI-Kalkül, Turing-Maschinen, μ-rekursive Funktionen, wurden nicht zur Ausführung erstellt. Sie wurden geschaffen, um grundlegende Fragen der Logik und Mathematik zu verstehen.
quelle
Es gibt 3 Möglichkeiten.
Assembler Der
von einem Menschen geschriebene Quellcode übersetzt 1 zu 1 in Maschinencode, der von der CPU verbraucht wird.
Interpreter
Ein Programm liest jede Codezeile, folgt den Anweisungen und führt diese der Reihe nach aus.
Compiler
Ein Programm analysiert die Anweisungen häufig mithilfe eines abstrakten Syntaxbaums und generiert daraus Objektcode.
Der Compiler generiert eine Art Objektcode, der von einer realen oder virtuellen Maschine verwendet werden kann.
Verwischen der Linien
Hier gibt es viele Vermittler.
Ruby läuft von seinem AST. Java führt bekanntermaßen Bytecode für eine fiktive CPU aus.
SQL wird interpretiert, aber nicht wie geschrieben ausgeführt, sondern in einen Abfrageplan übersetzt.
Javascript existiert in einer seltsamen Dämmerungszone. Es wird größtenteils interpretiert, aber kritische Teile werden über einen JIT-Compiler ausgeführt, der nicht standardisierten Bytecode generiert, und es wird auch als Objektcode für einige Compiler verwendet.
PHP war früher eine rein interpretierte Sprache, aber Facebook verwendet einen eigenen PHP-Compiler.
Meine Empfehlung
Wenn Sie mit dem Schreiben einer Programmiersprache experimentieren möchten.
Beginnen Sie mit einem Dolmetscher.
Wenn Sie Compiler verstehen wollen, studieren Sie ASTs!
Eine Sprache wie Pascal ist maßgeschneidert für einen AST, der in einem einzigen Durchgang vom Quell- zum Maschinencode wechseln kann und daher relativ einfach in einem Compiler implementiert werden kann.
Wenn Sie darauf bestehen, Compiler und nicht Dolmetscher zu studieren, empfehle ich Ihnen, Wirths Schriften zu diesem Thema zu studieren.
quelle
Ein Compiler muss lediglich sicherstellen, dass die Eingabe die Sprache verwendet, die der Compiler versteht, und dass er dieselbe semantische Struktur wie die Sprache aufweist.
Der Compiler fälscht Intelligenz, indem er einen Lexer und einen Parser verwendet, um die Eingabe lexikalisch zu analysieren und zu versuchen, die Token in eine Reihenfolge zu analysieren, die die beabsichtigte Bedeutung hat, ohne Mehrdeutigkeit einzuführen.
Um Ihre Frage zu beantworten, Sie KANN eine Programmiersprache erstellen , indem Sie den Compiler zu schaffen, aber so ist die Programmiersprache tatsächlich erstellt dabei vor der Compiler abgeschlossen ist.
Stellen Sie sich Programmiersprachen wie jede andere Sprache vor - Englisch, Französisch, Deutsch usw. Die Aufgabe eines Compilers besteht darin, bei einigen Eingaben sicherzustellen, dass die in dieser Eingabe verwendeten Wörter mit den Wörtern übereinstimmen, die in der Sprache verwendet werden, für die er erstellt wurde Stellen Sie sicher, dass die Reihenfolge der Wörter in der Sprache, für die sie erstellt wurden, sinnvoll ist, und übersetzen Sie diese Eingabe schließlich in eine Sprache, die die Maschine verstehen kann
quelle