====== Lyx – Syntax ====== Diese Seite bietet eine kompakte, technische Übersicht über die Syntax und Semantik der Sprache Lyx (Stand v0.5.7). ===== 1) Lexikalische Regeln ===== ==== Kommentare ==== Zeilenkommentar: // bis Zeilenende\ Blockkommentar: /* ... */ (nicht verschachtelt) ==== Identifier ==== Muster: [A-Za-z_][A-Za-z0-9_]*\ Case-sensitive: Unterscheidung zwischen Groß- und Kleinschreibung. ==== Literale & Suffixe ==== ^ Typ ^ Beispiel ^ Suffix ^ | Integer (64-bit) | 42 | (Standard) | | Integer (spezifisch) | 42i8, 255u8 | i8, i16, i32, u8, u16, u32, u64 | | Float (64-bit) | 3.14 | (Standard) | | Float (32-bit) | 3.14f32 | f32 | | Probabilistisch | 0.5q | q (für QBool) | | String | "Hello\n" | \n, \t, \r, \\, \", \0 | ===== 2) Variablen & Speicherklassen ===== Lyx unterscheidet strikt zwischen Veränderbarkeit und Speicherort. ^ Keyword ^ Modus ^ Ort ^ Beschreibung ^ | var | mutable | Stack/Data | Veränderbare Variable. | | let | immutable | Stack/Data | Einmalige Zuweisung zur Laufzeit. | | co | readonly | Stack | Schreibgeschützter Stack-Slot. | | con | constant | Code | Compile-zeit Konstante (Immediate). | Beispiel: var counter: int64 := 0; pub let APP_NAME: pchar := "Lyx Compiler"; con MAX_BUFFER := 1024; ===== 3) Kontrollfluss ===== ==== Bedingung (if/else) ==== if (x > 10) { print_str("Groß"); } else { print_str("Klein"); } ==== Schleifen (while/for/repeat) ==== // For-Schleife for i := 1 to 10 do { print_int(i); } // While-Schleife while (i < 10) { i++; } // Repeat-Until repeat { i++; } until (i == 10); ==== Pattern Matching (v0.5.0) ==== match (status) { case 200: print_str("OK"); case 400..499: print_str("Client Error"); case 500, 503: print_str("Server Error"); default: print_str("Unknown"); } ===== 4) Objektorientierung (OOP) ===== Lyx unterstützt Klassen (Heap) und Strukturen (Stack). type Player = class extends TObject { id: int64; fn Create(newId: int64) { self.id := newId; } fn speak() { print_str("I am a player."); } }; // Verwendung var p: Player := new Player(1); p.speak(); dispose p; // Manuelle Freigabe ===== 5) Spezielle Operatoren ===== ^ Operator ^ Name ^ Beschreibung ^ | := | Zuweisung | Trennung von Vergleich (==) und Zuweisung. | | \|> | Pipe | Datenfluss von links nach rechts: val \|> abs(). | | ?. | Safe Call | Memberzugriff nur, wenn Objekt nicht null ist. | | ?? | Coalesce | Fallback-Wert: name ?? "Gast". | | as | Cast | Explizite Typkonvertierung: x as f64. | ===== 6) Energy-Aware Pragmas (v0.5.7) ===== Der Compiler kann den Energieverbrauch pro Funktion optimieren: @energy(1) // Low Power Mode fn check_sensors() { // ... }