Naja, ich hab mir das mal durchgelesen. Ich habe übrigens nicht vor, eine C++ Compiler zu schreiben. Das wäre übrigens grundsätzlich eine schlechte Idee, denn C++ ist nicht nur eine der komplexesten Programmiersprachen überhaupt, sondern auch noch ein Superset von C, sodass die meisten C++-Compiler als C Compiler begonnen haben. Wie oben erwähnt, habe ich vor eine eigene Programmiersprache zu erstellen.
Zum Exeption Handling. Ich habe mir noch mal ein bisschen was dazu durchgelesen. Das Problem ist, die Adresse, an welcher der Exeption Handler steht, an den Fehlerbehandlungsfunktion der Laufzeitroutine zu übergeben. Dazu schlägt
http://en.wikipedia.org/wiki/Exception_handling#Exception_handling_implementation verschiedene Möglichkeiten vor. Ich halte das statische Sinnvoll, bei der der Exeption Handler an Hand einer Addresse (ich gehe davon aus, das es sich um die Rücksprungadresse handelt) und einer vorgefertigten Address-Frame-Table, in der dann die Adressbereiche aller try-Blöcke eingetragen sind, die Adresse des passenden Händlers ermittelt. Natürlich muss auch das Stack Unwinding durchgeführt werden, aber ich glaube, das ist er Nebensache, wenn man weiß, was aufgeräumt werden muss. Ich denke die Funktion sollte den Teil des Stacks über der Rücksprungadresse vor Aufruf des Error-Handlers selbst aufräumen, der Handler erledigt dann den Rest.