Semikolon nach Funktion (Klausurfrage-Fehler finden im Code)



  • Nicht ganz. Er baut nicht aus Müll + Semikolon auf einmal eine Deklaration, sondern er baut zwischendurch immer wieder kleine Teil-Syntaxbäume für die ganzen Bestandteile einer Deklaration und packt das auf den Stack. Wenn er jetzt beim Antreffen des Semikolons im richtigen Zustand ist (eine Deklaration kann ja z.B. nicht innerhalb eines Ausdrucks stehen, d.h. ein Semikolon in einem Ausdruck bedeutet auch etwas anderes) und auf dem Stack ein Teilbaum für init-declarator-list_opt und declaration-specifier_seq_opt liegen (was eigentlich auch Teil des Parserzustandes ist), dann baut er eine Deklaration (und führt meine semantische Aktion aus, d.h. ruft handle_simple_declaration auf).

    Das ist jetzt das Prinzip des Bottom-Up-Parsers gewesen, wie es z.B. yacc umsetzt. Top-Down-Parser funktionieren ein bisschen anders.



  • Bashar schrieb:

    Nicht ganz. Er ... baut zwischendurch immer wieder kleine Teil-Syntaxbäume für die ganzen Bestandteile einer Deklaration und packt das auf den Stack. Wenn er jetzt beim Antreffen des Semikolons im richtigen Zustand ist (eine Deklaration kann ja z.B. nicht innerhalb eines Ausdrucks stehen, d.h. ein Semikolon in einem Ausdruck bedeutet auch etwas anderes) und auf dem Stack ein Teilbaum für init-declarator-list_opt und declaration-specifier_seq_opt liegen (was eigentlich auch Teil des Parserzustandes ist), dann baut er eine Deklaration (und führt meine semantische Aktion aus, d.h. ruft handle_simple_declaration auf).

    OK, Danke! Den Rest hab' ich mir bei LEXandYACC zusammengelesen. Wow, ziemlich aufwendig - Du befasst Dich wohl nicht nur zum Spaß damit, was? 😉
    Glücklicherweise mußte ich noch nie auf solche Tools zurückgreifen, meine Problemstellungen waren dafür einfach zu schlicht.



  • pointercrash() schrieb:

    Du befasst Dich wohl nicht nur zum Spaß damit, was? 😉

    Der Spaß war zuerst, dann kam das "nicht nur zum Spaß" dazu 🙂


Anmelden zum Antworten