Wie kann die try/catch/finally Funktionalität auf einem Interpreter implementiert werden (momentan bin ich auf F #)?Wie implementieren Try/Except/Endlich in einem erfundenen Sprachinterpreter mit goto oder ähnlichem?
Ich vermute, dass GOTOs verwendet werden können (ist aber auch notwendig, um die Funktionalität dafür im Interpreter zur Verfügung zu stellen, nicht viel Ahnung wie), aber ich habe GOTO nie in meinem Leben benutzt (nur wissen, ist böse!) und weder verstehen, wie die Umwelt erhalten.
P.D: Ich weiß bereits, dass CPS (Continuations) gemacht werden kann, um Ausnahmen und andere Kontrollflüsse zu emulieren. Jedoch komplizieren sie den Rest der Sprachimplementierung und verlangen Optimierungsdurchlauf, um den Aufwand dafür zu eliminieren, und für diese Frage möchte ich alternative Möglichkeiten zu verstehen, dass
PD2: Existieren Sie eine andere Alternative zu CPS, die zu einfach führen Implementierung von benutzerdefinierten Kontrollflüssen? Oder eine Möglichkeit, GOTOs dafür zu verallgemeinern?
Eigentlich gibt es niemanden versuchen/außer/endlich. Es ist wirklich versuchen/außer und versuchen/schließlich und sie können innerhalb der anderen verschachtelt werden, z.B. (try (try Ausnahme) endlich). Dies macht es viel einfacher zu verarbeiten. –
Ich bin mir nicht sicher, aber ich vermute, dass Sie Informationen zur Verwendung in [Typen und Programmiersprachen] (https://www.cis.upenn.edu/~bcpierce/tapl/) finden können, die den Code in F # umgerechnet hat. https://github.com/jackfoxy/fsharp-tapl](https://github.com/jackfoxy/fsharp-tapl) oder [Eine Einführung in die funktionale Programmierung durch Lambda-Kalkül] (https: //www.cs.rochester .edu/~ brown/173/Lesungen/LCBook.pdf) in Abschnitt 5.4 Fehler. –