Eigene Programmiersprache- wo anfangen?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Am besten baust du dir dann deinen eigene Parsergenerator erst einmal.

Du fängst mit dem Parsen an, also dem einlesen des Textes. Den wandelst du in Tokens um.
Dabei kannst du schon grob den Syntax testen.

Danach prüfst du dann den Syntax über die Token ordentlich anhand einer Grammatik (EBNF) und baust daraus einen Syntaxbaum (Abstract Syntax Tree).

Wenn du den hast kannst du in einem wieteren Schritt eine Grammatik darüber definieren und testen (Attributgrammatik zum Beispiel: https://en.wikipedia.org/wiki/Attribute_grammar ).

Ansonsten entweder einen Parser drüberlaufen lassen oder den Baum in eine ausführabre Sprache übersetzen.

Zwischendrinnen kannst du noch Codeoptimierungen einbauen danach dann.


Benneth21 
Beitragsersteller
 02.02.2025, 09:34

Hi :)

Super vielen Dank für deine Antwort- so eine präzise Anleitung hatte ich nicht erwartet. Echt klasse 👍

Destranix  02.02.2025, 09:35
@Benneth21

Ist quasi die Vorlesung "Virtualisierung und Compilation" in der Kurzzusammenfassung ;-)

Benneth21 
Beitragsersteller
 02.02.2025, 09:38
@Destranix

Scheinst zugehört zu haben 😂 Schonmal sowas in der Art umgesetzt?

Destranix  02.02.2025, 09:40
@Benneth21

Ich habe lange bevor ich von Parsergeneratoren wusste mal einen XML-Parser geschrieben.

Ansonsten in der Vorlesung einen Parser für deine DSL, unter Verwendung von AntLR.

Ich habe fast mein ganzes Berufsleben lang (seit 1970) programmiert, davon habe ich 25 J. lang als selbständiger Softwareentwickler im ERP-Bereich gearbeitet. In dieser Zeitspanne sind viele Programmiersprachen entstanden, die Entwicklung auf diesem Gebiet war mächtig und es wird sich auch in Zukunft noch viel hinsichtlich von KI verändern. Die Programmiersprache war für mich nie ein Problem, wichtig ist doch, dass man damit möglichst effektiv das gewünschte Ergebnis umsetzen und verwiklichen kann.

Es gibt wirklich schon so viele Programmiersprachen, ob da noch eine dazukommt oder auch nicht, dürfte ziemlich unwichtig sein.

Wenn du dir die Entwicklung einer deutschsprachigen Programmiersprach als Ziel gesetzt hast, wünsche ich dir dabei viel Erfolg. Einen neuen Compiler oder Interpreter zu entwickeln der Zeitaufwand (Zeit = Geld) dafür wird wohl der Knackpunkt sein. Es gibt ja Bücher, die sich mit Compilern befassen, ich habe mir noch keines davon angeschafft.


Benneth21 
Beitragsersteller
 02.02.2025, 09:50

Danke für deine Antwort :D

Programmiersprachen gibt es wirklich viele, die von vielen smarten Menschen entwickelt werden. Wenn Du jetzt deine eigene Sprache dagegensetzt, dann hat diese sehr wahrscheinlich keine Relevanz, außer wenn Du vielleicht einen besonderen Anwendungsfall viel besser löst als Andere.

Wo Du anfangen sollst: Ich würde mir ein Buch über Compilerbau holen oder auf einer existierenden Sprache aufsetzen und in der eine Domain Specific Language schreiben. Dann kannst Du von dieser Sprache aus schauen, wie Du zu einer rein von Dir geschriebenen Sprache kommst.

Manche Sprachen kompilieren nach C oder C++, dann kannst Du von da den Compiler nach Maschinencode und die Optimierung „mitnehmen“.

Edit: Ich würde mir auch noch kurz anlesen, was Turing-Vollständigkeit bedeutet. Deine Sprache sollte Turing-vollständig sein.


Benneth21 
Beitragsersteller
 02.02.2025, 09:28
Programmiersprachen gibt es wirklich viele, die von vielen smarten Menschen entwickelt werden. Wenn Du jetzt deine eigene Sprache dagegensetzt, dann hat diese sehr wahrscheinlich keine Relevanz, außer wenn Du vielleicht einen besonderen Anwendungsfall viel besser löst als Andere.

Keine Sorge, ist nur für mich :)

Vielen Dank für deine Antwort. Wirklich hilfreich.

Zunächst mal solltest du die Formalen Methoden lernen um eine Sprache zu erstellen.

Die Sprache muss am Ende nämlich immer eindeutig sein und kein Konstrukt darf Mehrdeutig sein, schon alleine das kann schwierig sein.

Für wirkliche Sprachen solltest du diese Eindeutigkeit auch nachweisen.

Du musst zudem zeigen dass deine Sprache Turingvollständig ist.

Wenn du deine Sprache definiert hast brauchst du eben einen Parser und das ist wieder ein Thema für sich.

Dazu musst du zunächst einen Lexer bauen. Dieser nimmt die einzelnen Wörter und zeichen und erzeugt draus Tokens. Diese Tokens sind dann quasi nur noch eindeutige Zahlen die den Programmcode wieder eindeutig widergeben.

Danach brauchst du einen Parser, also ein Programm welches die Tokens verarbeitet und in eine Pseudoanwendungsliste überführt. Die Pseudoanweisungsliste ist ähnlich zum Maschinencode nur dass sie noch keine spezifische Platform bedienen soll.

Danach brauchst du noch eine Runtime, also ein Programm welches diese Pseudoanwendungsliste liest und entsprechende Aktionen ausführt. Die Pseudoanweisungsliste richtet sich dabei an tatsächlichen Prozessoren, also da hast du eben Befehle um Daten aus dem Speicher zu holen, Daten zu vergleichen etc.

Wenn du dann noch weitergehen willst kannst du diese Pseudoanweisungsliste auch in tatsächlichen Maschinencode überführen.

Natürlich muss am Ende jeder dieser Schritte wieder Turingvollständigkeit erlauben, damit das Gesamtpaket es auch ist. Wenn also der Ausgang deines Parsers nicht mehr Turingvollstänig ist, ist das Gesamtpaket auch nicht mehr Turingvollständig.


Benneth21 
Beitragsersteller
 02.02.2025, 10:37

Danke für deine Antwort.