AST aufstellen und ausgeben

cwriter

Erfahrenes Mitglied
Schau doch nochmal drüber und sprich.
Ist sauberer, aber deine Sprache ist noch immer Whitespace-sensitiv. Ist das gewollt?

sag mal, warum sehe ich keine Updates mehr im Kalender unten auf der Seite
Ich nutze Github nicht.

Der Funktioniert testweise.
Ja, solange du z.b. keine Eingabe "/" parst - dann stürzt dein Programm nämlich ab. So als Beispiel.

cwriter
 

ComFreek

Mod | @comfreek
Moderator
Ich habe mir soeben deine neue mainwindow.cc angesehen.

@cwriter hat recht, deine Versuche zu parsen sehen eher nach Trial & Error aus. Das wird leider garantiert nicht klappen.
Wenn man ein bisschen mit (Klammern-)Stacks spielt, kann man vielleicht einen funktionierenden* JSON-Parser sich aus dem Ärmel schütteln. Für alles Weitere braucht man zwingend einen systematischen Ansatz, es gibt nicht umsonst genügend Theorie um das Thema Parsen.

*) Selbst das ist fragwürdig, siehe z. B. Parsing JSON is a Minefield.


Wenn du mit ASTs spielen möchtest, empfehle ich dir (auch wie @cwriter oben schon) einen Parsergenerator zu nutzen. Dann brauchst du nur noch eine Grammatik deiner Sprache anzugeben, das ist wesentlich intuitiver. Auf den resultierenden ASTs kannst du immer noch deine eigenen Durchgänge (Passes) anwenden, um etwa die ASTs optimieren.

Wenn du etwas weiter gefasst mit dem Thema Kompilierer spielen möchtest, empfehle ich dir LLVM anzusehen. Dort kannst du etwa ein neues Frontend für deine eigene Sprache schreiben! Das ist auch gar nicht so schwierig, schau dir z. B. diverse Brainf*ck-Frontends an, die es im Internet gibt. Mit nur einem selbstgeschriebenen Frontend bist du schon in der Lage, den Code optimieren zu lassen und lauffähigen x86-Code zu erzeugen!
Auch ein neues Backend kannst du für deine Sprache schreiben. So könntest du jede andere Sprache, für die ein Frontend existiert (C, C++, ...), in deine Sprache transpilen.