====== 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() {
// ...
}