Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
6a7bb79
Initial plan
Copilot Nov 12, 2025
a0b6654
Add comprehensive standard library and enhanced hypnotic features
Copilot Nov 12, 2025
5641767
Update EBNF grammar to include new language features
Copilot Nov 12, 2025
a608149
Add interactive hypno-pendulum simulator example
Copilot Nov 12, 2025
5b31705
Update DEFINITION.md
JosunLP Nov 12, 2025
1a153de
Fix code review issues
Copilot Nov 12, 2025
31cb615
Update DEFINITION.md
JosunLP Nov 12, 2025
dfd9eaf
Improve Language definition
JosunLP Nov 12, 2025
90944c1
Update DEFINITION.md
JosunLP Nov 12, 2025
1fbf186
Update DEFINITION.md
JosunLP Nov 12, 2025
ba39d94
Fix undefined function call in example
Copilot Nov 12, 2025
c4f5f6e
Füge Beispiele für Trigger und Event-Hooks in die Dokumentation ein
JosunLP Nov 12, 2025
9751a1f
Merge branch 'copilot/improve-hyposcript-definition' of https://githu…
JosunLP Nov 12, 2025
f56fea8
Füge Beispiele für Trigger und Event-Handler zur Dokumentation hinzu
JosunLP Nov 12, 2025
7aa580a
Update examples/21_hypno_pendulum_simulator.hyp
JosunLP Nov 12, 2025
3465ef4
Update DEFINITION.md
JosunLP Nov 12, 2025
017b4fa
Update examples/16_standard_library_strings.hyp
JosunLP Nov 12, 2025
cdceb61
Update examples/17_standard_library_datastructures.hyp
JosunLP Nov 12, 2025
8b133c5
Update DEFINITION.md
JosunLP Nov 12, 2025
8ef07af
Update DEFINITION.md und Beispiele für Trigger und Callbacks in Hypno…
JosunLP Nov 12, 2025
2c9c226
Update DEFINITION.md: Präzisierung der Beschreibung für `anchor` in H…
JosunLP Nov 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,377 changes: 1,196 additions & 181 deletions DEFINITION.md

Large diffs are not rendered by default.

22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@

**HypnoScript** ist eine minimalistische, esoterische Sprache, die sich an die Syntax von TypeScript/JavaScript anlehnt und dabei alle möglichen Klischees rund um Hypnose, Trance und hypnotische Induktion verwendet. Trotz des humorvollen Charakters ist sie auf Turing-Vollständigkeit ausgelegt und unterstützt Variablen, Schleifen, bedingte Anweisungen, Funktionen, Objektorientierung (als _Session-Konzept_) und diverse Sprach-Gimmicks im hypnotischen Stil.

Die Sprache verfügt über eine **umfassende Standardbibliothek** mit hypnotisch benannten Funktionen für:
- Mathematische Operationen (Hypno-Math)
- String-Manipulation (StringSpell)
- Datenstrukturen (MemoryPalace)
- Zeit- und Datumsfunktionen (TimeWarp)
- Erweiterte Kontrollstrukturen (DeepMind)
- Ein-/Ausgabe-Funktionen (SensoryInput)

Für die vollständige Sprachdefinition siehe [DEFINITION.md](DEFINITION.md).

## Grundaufbau

### Lexikalische Struktur
Expand All @@ -39,7 +49,17 @@

### Schlüsselwörter

Beispiele für Schlüsselwörter sind `Focus`, `Relax`, `if`, `else`, `while`, `loop`, `suggestion`, `awaken`, `induce`, `observe`, `trance`, `session`, `constructor`, `drift`, `tranceify`, etc.
Beispiele für Schlüsselwörter sind `Focus`, `Relax`, `if`, `else`, `while`, `loop`, `suggestion`, `awaken`, `induce`, `observe`, `trance`, `session`, `constructor`, `drift`, `tranceify`, `trigger`, `anchor`, `oscillate`, `pendulum`, `whisper`, `command`, `freeze`, `finale`, etc.

Die Sprache bietet auch **hypnotische Operator-Synonyme** wie:
- `youAreFeelingVerySleepy` für `==`
- `lookAtTheWatch` für `>`
- `fallUnderMySpell` für `<`
- `yourEyesAreGettingHeavy` für `>=`
- `goingDeeper` für `<=`
- `youCannotResist` für `!=`
- `underMyControl` für `&&`
- `resistanceIsFutile` für `||`

### Operatoren und Sonderzeichen

Expand Down
45 changes: 45 additions & 0 deletions examples/15_standard_library_math.hyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
Focus {

entrance {
observe "=== Hypno-Math Bibliothek Demo ===";
}

// Grundlegende mathematische Operationen
induce radius: number = 5.0;
induce area: number = hypnoticPi() * power(radius, 2);
observe "Kreisfläche mit Radius " + radius + ": " + area;

// Trigonometrische Funktionen (Pendel-Bewegungen)
induce angle: number = 45.0;
induce sine: number = pendulumSin(angle);
induce cosine: number = pendulumCos(angle);
observe "Sinus von " + angle + " Grad: " + sine;
observe "Cosinus von " + angle + " Grad: " + cosine;

// Rundungsfunktionen
induce floatNum: number = 3.7;
observe "floor(" + floatNum + ") = " + floor(floatNum);
observe "ceiling(" + floatNum + ") = " + ceiling(floatNum);
observe "roundToNearest(" + floatNum + ") = " + roundToNearest(floatNum);

// Min/Max (Dominant/Submissive)
induce a: number = 42;
induce b: number = 17;
observe "Dominant (max) von " + a + " und " + b + ": " + selectDominant(a, b);
observe "Submissive (min) von " + a + " und " + b + ": " + selectSubmissive(a, b);

// Zufallszahlen (Unbewusste Entscheidungen)
observe "Unbewusste Zufallszahl zwischen 1 und 100: " + unconsciousInt(1, 100);
observe "Unbewusste boolean Entscheidung: " + unconsciousBool();

// Potenz und Wurzel
induce base: number = 2;
induce exponent: number = 10;
observe base + " hoch " + exponent + " = " + power(base, exponent);
observe "Quadratwurzel von 16: " + squareRoot(16);

finale {
observe "=== Demo beendet ===";
}

} Relax
60 changes: 60 additions & 0 deletions examples/16_standard_library_strings.hyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
Focus {

entrance {
observe "=== StringSpell Bibliothek Demo ===";
}

// String-Manipulation
induce message: string = " Willkommen in der Trance ";
induce cleaned: string = trimEdges(message);
observe "Original: '" + message + "'";
observe "Bereinigt: '" + cleaned + "'";

// Länge messen
observe "Tiefe der Nachricht: " + measureDepth(cleaned);

// String zerlegen und zusammenfügen
induce words: string[] = fragmentMemory(cleaned, " ");
observe "Wörter: " + mergeThoughts(words, ", ");
observe "Anzahl Wörter: " + vaultSize(words);

induce rejoined: string = mergeThoughts(words, "-");
observe "Zusammengefügt mit '-': " + rejoined;

// String-Transformation
induce loud: string = toUpper(cleaned);
induce quiet: string = toLower(cleaned);
observe "LAUT (Befehl): " + loud;
observe "leise (flüstern): " + quiet;

// String umkehren
induce reversed: string = reverseTrance("Hypnose");
observe "Umgekehrt: " + reversed;

// Mantra wiederholen
induce mantra: string = repeatMantra("Om ", 5);
observe "Mantra: " + mantra;

// Muster suchen und ersetzen
induce text: string = "Du bist in Trance, tiefer Trance";
if (containsPattern(text, "Trance")) {
observe "Das Wort 'Trance' wurde gefunden!";
}

induce replaced: string = replaceAllMemories(text, "Trance", "Entspannung");
observe "Ersetzt: " + replaced;

// String-Prüfungen
if (startsWithSuggestion(text, "Du bist")) {
observe "Der Text beginnt mit 'Du bist'";
}

if (endsWithAwakening(text, "Trance")) {
observe "Der Text endet mit 'Trance'";
}

finale {
observe "=== StringSpell Demo beendet ===";
}

} Relax
91 changes: 91 additions & 0 deletions examples/17_standard_library_datastructures.hyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
Focus {

entrance {
observe "=== MemoryPalace Datenstrukturen Demo ===";
}

// Array-Operationen
induce memories: number[] = [10, 5, 8, 3, 12, 7];
observe "Original Memories: " + memories;
observe "Vault-Größe: " + vaultSize(memories);

// Sortieren
induce sorted: number[] = sortMemories(memories);
observe "Sortiert: " + sorted;

// Umkehren
induce reversed: number[] = reverseMemories(memories);
observe "Umgekehrt: " + reversed;

// Erstes und letztes Element
observe "Erste Erinnerung: " + firstMemory(memories);
observe "Letzte Erinnerung: " + lastMemory(memories);

// Map - Alle Werte verdoppeln
induce doubled: number[] = mapMemories(memories, suggestion(x: number): number {
awaken x * 2;
});
observe "Verdoppelt: " + doubled;

// Filter - Nur Werte > 6
induce filtered = filterMemories(memories, suggestion(x: number): boolean {
awaken x lookAtTheWatch 6;
});
observe "Gefiltert (> 6): " + filtered;

// Reduce - Summe berechnen
induce sum = reduceToEssence(memories, suggestion(acc: number, x: number): number {
awaken acc + x;
}, 0);
observe "Summe aller Erinnerungen: " + sum;

// Stack (LIFO) - Last In, First Out
observe "";
observe "--- MindStack Demo ---";
induce stack = MindStack();
stack.push("Erste Ebene");
stack.push("Zweite Ebene");
stack.push("Dritte Ebene (Oberste)");

observe "Stack-Größe: " + stack.size();
observe "Peek (ohne zu entfernen): " + stack.peek();
observe "Pop: " + stack.pop();
observe "Pop: " + stack.pop();
observe "Verbleibende Größe: " + stack.size();

// Queue (FIFO) - First In, First Out
observe "";
observe "--- ThoughtQueue Demo ---";
induce queue = ThoughtQueue();
queue.enqueue("Gedanke 1");
queue.enqueue("Gedanke 2");
queue.enqueue("Gedanke 3");

observe "Queue-Größe: " + queue.size();
observe "Dequeue: " + queue.dequeue();
observe "Dequeue: " + queue.dequeue();
observe "Verbleibende Größe: " + queue.size();

// MemoryMap (Dictionary/Hash)
observe "";
observe "--- MemoryMap Demo ---";
induce map = MemoryMap();
map.store("name", "Alice");
map.store("alter", 30);
map.store("beruf", "Hypnotiseurin");

observe "Name: " + map.retrieve("name");
observe "Alter: " + map.retrieve("alter");
observe "Beruf: " + map.retrieve("beruf");

observe "Alle Schlüssel: " + map.allKeys();
observe "Hat 'name' Schlüssel? " + map.hasKey("name");

map.forget("alter");
observe "Nach Löschen von 'alter': " + map.allKeys();

finale {
observe "=== MemoryPalace Demo beendet ===";
}

} Relax
112 changes: 112 additions & 0 deletions examples/18_advanced_hypnotic_features.hyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
Focus {

entrance {
observe "=== Erweiterte Hypnotische Features Demo ===";
}

// Verwende alle hypnotischen Operator-Synonyme
induce x: number = 10;
induce y: number = 10;
induce z: number = 5;

observe "=== Hypnotische Operator-Synonyme ===";

// youAreFeelingVerySleepy (==)
if (x youAreFeelingVerySleepy y) {
observe "x youAreFeelingVerySleepy y: x ist gleich y!";
}

// youCannotResist (!=)
if (x youCannotResist z) {
observe "x youCannotResist z: x ist ungleich z!";
}

// lookAtTheWatch (>)
if (x lookAtTheWatch z) {
observe "x lookAtTheWatch z: x ist größer als z!";
}

// fallUnderMySpell (<)
if (z fallUnderMySpell x) {
observe "z fallUnderMySpell x: z ist kleiner als x!";
}

// yourEyesAreGettingHeavy (>=)
if (x yourEyesAreGettingHeavy y) {
observe "x yourEyesAreGettingHeavy y: x ist größer oder gleich y!";
}

// goingDeeper (<=)
if (z goingDeeper x) {
observe "z goingDeeper x: z ist kleiner oder gleich x!";
}

// underMyControl (&&)
if (x lookAtTheWatch 5 underMyControl y lookAtTheWatch 5) {
observe "Beide Bedingungen erfüllt mit underMyControl (&&)!";
}

// resistanceIsFutile (||)
if (x lookAtTheWatch 100 resistanceIsFutile y youAreFeelingVerySleepy 10) {
observe "Mindestens eine Bedingung erfüllt mit resistanceIsFutile (||)!";
}

observe "";
observe "=== Neue Sprachfeatures ===";

// Freeze - Unveränderliche Variable
freeze PI: number = 3.14159;
observe "PI (eingefroren): " + PI;
// PI = 3.0; // Würde einen Fehler verursachen!

// Whisper - Ausgabe ohne Zeilenumbruch
whisper "Dies ist eine ";
whisper "zusammenhängende ";
whisper "Nachricht";
observe ""; // Zeilenumbruch

// Oscillate - Toggle-Funktion
induce isActive: boolean = false;
observe "isActive vor oscillate: " + isActive;
oscillate isActive;
observe "isActive nach 1x oscillate: " + isActive;
oscillate isActive;
observe "isActive nach 2x oscillate: " + isActive;

// Anchor - Zustand speichern und wiederherstellen
induce counter: number = 42;
anchor savedCounter = counter;
observe "Original counter: " + counter;

counter = 100;
observe "Geänderter counter: " + counter;

counter = savedCounter;
observe "Wiederhergestellter counter: " + counter;

// DeepFocus-Blöcke und deeperStill
observe "";
observe "=== DeepFocus Blöcke ===";

if (x lookAtTheWatch 5) deepFocus {
observe "In tiefem Fokus...";

if (y lookAtTheWatch 8) deeperStill {
observe "Noch tiefer im Fokus!";
}
}

// Implant - Alternative Variablendeklaration
implant secretValue: number = 999;
observe "Implantierter Wert: " + secretValue;

// Command - Imperative Ausgabe
command "AUFWACHEN!";

finale {
observe "";
observe "=== Demo abgeschlossen ===";
observe "Du erwachst aus der Trance...";
}

} Relax
Loading