Wie programmiert man eine Programmiersprache (java)?

...komplette Frage anzeigen

5 Antworten

In der Regel entwickelt man zunächst einen Compiler in einer beliebigen (in der Regel höheren) Programmiersprache und anschließend erneut in der Sprache, die der Compiler selbst übersetzt.

So ist der Go-Compiler von Google beispielsweise in Go implementiert und die meisten C-Compiler in C.

Bei Java ist die Situation ein bisschen anders, da Java zunächst in einen Zwischencode (Bytecode) übersetzt und anschließend auf dem Zielsystem durch die Java Virtual Machine (JVM) interpretiert bzw. just-in-time-compiliert wird.

Bei den Sprachen für das .NET-Framework, beispielsweise C-Sharp, ist es genau so. Hier wird der Zwischencode als Common Intermediate Language (CIL) und der Interpreter bzw. JIT-Compiler als Common Language Infrastructure (CLI) bezeichnet. Die Namen und der Befehlssatz unterscheiden sich, aber das Prinzip ist exakt das selbe.

Einen Compiler zu bauen, ist alles andere, als einfach. Dafür benötigt man viel Theorie, insbesondere Kenntnisse über formale Sprachen/Grammatiken, Automaten, etc.

Die Grundlagen dazu lernt man im Informatikstudium in den entsprechenden Theorieveranstaltungen bereits in den ersten Semestern, bzw. weiterführend dann in entsprechenden aufbauenden Veranstaltungen. Damit könnte man dann prinzipiell schon einen einfachen Parser/Compiler bauen. (Habe ich auch schon gemacht.) Über einen "proof-of-concept" hinaus zu gehen und einen Compiler für eine "vollumfängliche", nützliche Sprache zu entwickeln, ist allerdings ein enormer Aufwand - der sich in der Regel nicht lohnt, weil es für nahezu sämtliche Anwendungsfälle bereits genügend geeignete Programmiersprachen bzw. Compiler gibt.

Interessante Frage.

Grundsätzlich programmierst du keine "Programiersprache" sondern einen Compiler.

Eine Programmiersprache ist einfach nur eine formale Beschreibung, wie man eben Buchstaben anneinander reihen darf. Damit kann ein Prozessor absolut nichts anfangen.

Du musst dann mithilfe eines Compilers (wegen mir auch Interperter) deine Programme so aufbereiten und übersetzen, dass die vom einem Computer verstanden werden.

Und in welches Sprache schreibt man einen Compiler?

Funny Fact: Der "offizielle" Java-Compiler ist tatsächlich in Java geschrieben.

Was ich übrigens auch erst gerade eben herausgefunden habe ;).

Wers nicht glaubt kann selber nachschauen. Hier die Sourcen: http://hg.openjdk.java.net/jdk9/dev/langtools/file/552f8fdfba55/src/

Henne - Ei - Problem, oder?

Wie compiliert man nun einen Compiler - wenn man ja den Compiler zu compilieren des Programmes erst compilieren muss?

Der erste Java-Compiler war in C geschrieben. Nun hat man einen funktionstüchtigen Java-Compiler und kann den neuen Java-Compiler immer mit dem alten Java-Compiler übersetzen.

JVM

Das ist bei Java immer etwas spezielles. Java übersetzt ja nicht so, dass der Computer das lesen kann. Der Java-Compiler übersetzt so, dass ein weiteres Programm - genannt JVM - die Programme verstehen kann. Und dann übersetzt die JVM während das Programm ausgeführt ist das Programm für den Prozessor.

Die "offizielle" JVM ist zur Vollständigkeit viel C++.

Dafür müsste man doch eine andere Programmiersprache erlernen, um eine Programmiersprache zu programmieren oder?

Mehr als nur eine.

Und zwar nicht zwingend, um dann etwas in den Programmiersprachen tatsächlich zu schreiben.

Viel mehr, um sich umzuschauen, was andere Sprachen bereits gut oder schlecht machen - und es dann hoffentlich besser machen.

Gruß

Tuxgamer

Für sowas gibts keine Programmiersprache - das ist dann schon die ebene der Maschinensprache.

Zum Verständnis kann man in dieser Reihenfolge nachlesen:

Programmcode (C++, HTML, Java oder andere) Wird umgerechnet in Hexadezimal wird umgerechnet in Binär.

Natürlich wäre es viel zu schwierig eine Programmiersprache wie C++ aus Nullen und Einsen zu Programmieren. Wohl auch ziemlich unmöglich, wenn man bedenkt dass das sicherlich einige Milliarden 0er und 1er sind - in der richtigen Reihenfolge :P

Programmcode (..., HTML, ...)

html ist immer noch keine Programmiersprache

Hexadezimal wird umgerechnet in Binär.

Ob hexadezimal oder binär ist nur eine andere Darstellung. Du rechnest nicht Hexadezimal in Binär um - viel mehr lässt du dir jeweils 4 0-en bzw. 1-en als eine Hexadezimal-Ziffer darstellen.

1
@Tuxgamer2

Ob hexadezimal oder binär ist nur eine andere Darstellung. Du rechnest nicht Hexadezimal in Binär um - viel mehr lässt du dir jeweils 4 0-en bzw. 1-en als eine Hexadezimal-Ziffer darstellen.

... was das selbe, wie eine Umrechnung ist.

Bei Oktal lässt Du Dir 3 Bits durch ein Zeichen darstellen, bei Base64 sind es 6 Bits, ...

0
@NoHumanBeing

Und beim (erweiterten) Ascii sind es 8 bit. 

Wo auch niemand auf die Idee kommen würde, von "Umrechnen" zu sprechen.

Aber völlig egal, wie du das nennst. Meine Eigentliche Aussage war sowieso, dass es völliger Blödsinn ist zu sagen, man muss C++ zuerst als Hexadezimal compilieren und danach in Binär umrechnen.

Schon allein, weil man Hexadezimal auf dem PC nicht anders (sinnvoll) speichern kann als eben Binär.

1

Java ist ein Sonderfall, da der compilierte Bytecode von einer JVM (Java Virtual Machine) ausgeführt wird, laut Wikipedia ist diese meistens in C oder C++ geschrieben.

https://de.wikipedia.org/wiki/Java_Virtual_Machine

Das mit Maschinensprache hat hier ja schon jemand anders geschrieben, aber am Ende besteht halt alles irgendwann aus Befehlen für den Prozessor.

Was möchtest Du wissen?