Pass 3Status: ✅ Vollständig implementiert

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

  • 1
    Multiple Catch-BlocksWerden in ein zentrales Match-Statement transformiert.
  • 2
    Finally-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:

desugar_program(program)
└── desugar_item(item)
├── desugar_block(body)
└── desugar_expression(expr)
└── desugar_try_statement(try_stmt)

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.