DesugaringPass - Syntaktische Transformation
Der DesugaringPass transformiert benutzerfreundlichen "Syntactic Sugar" in explizite, standardisierte Sprachkonstrukte. Dies vereinfacht die nachfolgenden Analysen und garantiert eine konsistente Behandlung durch den Type-Checker.
Zentrales Konzept
Syntaktischer Zucker macht die Sprache ausdrucksstärker, erhöht aber die Komplexität des AST. Der DesugaringPass reduziert diese Komplexität, indem er High-Level Konstrukte (wie try-catch) in primitive Muster (wie Result-Pattern Matching) übersetzt.
Normalisierung
"Einheitliche AST-Struktur für alle Konstrukte, unabhängig von der Schreibweise."
Primitivierung
"Transformation komplexer Statements in grundlegende Expressions und Blöcke."
Try-Catch Transformation
Eines der wichtigsten Features ist die Umwandlung von try-catch Blöcken in das funktionale Result<T, E> Pattern.
Vorher (Sugar)
try {
return riskyOperation();
} catch (err) {
handleError(err);
}Nachher (Desugared)
let __try_result = (|| {
return Result.ok(riskyOperation());
})();
if __try_result.isErr() {
let err = __try_result.err().unwrap();
handleError(err);
}Erweiterte Transformationen
- 1Multiple Catch-BlocksWerden in ein zentrales Match-Statement transformiert.
- 2Finally-BlocksWerden in Lambdas gewrappt, die garantiert am Ende ausgeführt werden.
Rekursive Verarbeitung
Der Pass arbeitet rekursiv über alle Ebenen des AST, um sicherzustellen, dass auch tief verschachtelte Sugar-Syntax aufgelöst wird:
Pipeline Integration
Der DesugaringPass läuft nach dem ParserPass und vor dem CodeOrderingPass. Dies stellt sicher, dass alle nachfolgenden Passes mit einem sauberen, standardisierten AST arbeiten können.