Syntaxbaum

Der Parser des Scripting-Systems ist schon fertig. Das ging schnell und hat weniger Probleme bereitet, als ich zunächst befürchtet hatte. Ok, ich hatte zwar vorher schon mal einen Parser geschrieben, jedoch hat der lediglich Klammerausdrücke analysiert. Nichts Wildes. Die dabei gesammelten Erfahrungen haben mir jetzt eigentlich nicht geholfen. Umso überraschter bin ich.

Der Parser analysiert den Skriptcode und baut einen so genannten Syntaxbaum auf. Auf Basis dieses Syntaxbaums soll dann der Bytecode generiert werden, der letztlich zur Laufzeit ausgeführt wird. Bisher ist aber nur der Parser fertig. Der Builder und der Interpreter müssen noch programmiert werden. Das mache ich als nächstes. Aber der Parser funktioniert schon hervorragend. Das möchte ich kurz an einem Beispiel demonstrieren.

z := 1;
while ( abs( z*z - x ) >= mu )
{
  z := z - ( z*z - x ) / 2*z;
}

Der oben stehende Skriptcode zur Berechnung der Quadratwurzel wird vom Parser korrekt zerlegt und in einen Syntaxbaum transformiert. Die vielleicht etwas unübersichtliche Visualisierung des Syntaxbaums müsst Ihr mir verzeihen, aber das ist ein Ausschnitt aus dem Log-Text der Engine. Es handelt sich dabei um Debug-Ausgaben des Parsers. Ich habe also nicht gemogelt, um es schöner aussehen zu lassen, sondern das ist tatsächlich das, was der Parser im Hintergrund anstellt und entsprechend ausgibt. Ein kleiner Beweis, dass es zumindest für das vorliegende Beispiel funktioniert.

Schön zu sehen ist vor allem, dass die Punkt-vor-Strich-Rechnung korrekt umgesetzt wird, aber nur sofern durch Klammersetzung nichts anderes “befohlen” wird. Die räumliche Trennung einiger Teilausdrücke und so dienen lediglich der Übersicht, denn Leerzeichen etc. werden schon vor dem Parser von einem Präprozessor weggewixt.

Ich denke, den Builder zu programmieren, wird kein großes Problem sein. Mehr “Angst” habe ich da schon vor dem Interpreter, der die einzelnen Laufzeitumgebungen verwalten muss etc. Mal sehen…

8 Antworten zu “Syntaxbaum”

  1. El Brolino sagt:

    Sehr geil, Flinsch, du bist der größte!

  2. Sander sagt:

    Naja, ist ja ganz nett…

    Aber so völlig ohne Builder?

    Geht ja mal gar nicht, Flinsch.

  3. Flinsch (admin) sagt:

    :D
    Geil, Sander!
    Aber: Der Builder ist sogar schon fertig. Ging schnell und ohne Probleme, wie geahnt. Aber ich habe gerade keine Zeit… ;)
    Derweilen kannst du aber schon mal den Syntaxbaum auswendig lernen, damit du den Output vom Builder in den nächsten Tagen damit vergleichen kannst… ;)

  4. Sander sagt:

    Ja, so ein Builder ist ja auch nie das Problem.

    Der Interpreter macht mir Sorgen. Wenn Du Hilfe brauchst, ruf bitte nicht wieder mich an. Vielleicht ja mal die Schellxeption?

  5. Sander sagt:

    Ich mein, der Interpreter muss ja die verdammten Laufzeitumgebungen verwalten.

  6. Flinsch (admin) sagt:

    :D

  7. blogring.org sagt:

    Blogring für syntaxbaum…

    Verwandte Blog-Einträge…

  8. cyber-e-razor.de» Blogarchiv » Ernie-Script (II/II) sagt:

    [...] der Quadratwurzel definiert, dessen entscheidenden Code wir bereits bei der Vorstellung des Syntaxbaums und des Builders kennen gelernt [...]

Hinterlasse eine Antwort