"You are feeling very sleepy... Your code is getting deeper... and deeper..."
- HypnoScript – Eine esoterische, TypeScript-inspirierte Sprache mit hypnotischem Flair
- Inhaltsverzeichnis
- 1. Einleitung
- 2. Grundaufbau
- 3. Syntax
- 3.1 Programmstruktur
- 3.2 Deklarationen
- 3.3 Kontrollstrukturen
- 3.4 Blöcke
- 3.5 Erweiterte Konzepte
- 3.5.1 Objektorientierung:
session - 3.5.2 Warte-Mechanismus:
drift(ms) - 3.5.3 Hypnotische Operator-Synonyme
- 3.5.4 Benutzerdefinierte Strukturen/Typen:
tranceify - 3.5.5 Muster-Entraining:
entrain - 3.5.6 Asynchrone Trance:
mesmerize&await - 3.5.7 Module & gemeinsame Trancen
- 3.5.8 Trigger: Event-Hooks & Callback-Mechanismen
- 3.5.1 Objektorientierung:
- Beispiel 1: Cleanup-Trigger
- Beispiel 2: Event-Handler für Wiederholungen
- Beispiel 3: Parametrisierte Trigger
- Beispiel 4: Trigger in Sessions
- 4. Grammatik (EBNF)
- 5. Semantik
- 6. Standardbibliothek
- 6.1 Tranceify-Bibliothek (Kernfunktionen)
- 6.2 Hypno-Math (Mathematische Funktionen)
- 6.3 StringSpell (String-Manipulation)
- 6.4 MemoryPalace (Datenstrukturen)
- 6.5 TimeWarp (Zeit- und Datumsfunktionen)
- 6.6 DeepMind (Erweiterte Kontrollstrukturen)
- 6.7 SensoryInput (Ein-/Ausgabe-Funktionen)
- 6.8 AuraAsync (Asynchronität & Tasks)
- 6.9 DreamWeaver Patterns (Pattern Matching)
- 6.10 Stagecraft Visions (UI & Präsentation)
- 6.11 HypnoNet (Netzwerk & APIs)
- 6.12 RealityAnchor (Persistenz & Storage)
- 6.13 LucidDiagnostics (Debugging & Telemetrie)
- 7. Beispielprogramme
HypnoScript ist eine moderne, esoterische Programmiersprache, die sich an die Syntax von TypeScript/JavaScript anlehnt und dabei konsequent Klischees und Metaphern aus der Welt der Hypnose verwendet. Die Sprache vereint humorvolle Themenwahl mit ernsthafter Funktionalität und bietet ein vollständiges, Turing-vollständiges Sprachsystem.
HypnoScript folgt dem Paradigma der "Hypnotischen Programmierung", bei der:
- Code als Suggestion betrachtet wird – Programme sind Sequenzen von Suggestionen an den Computer
- Variablen in Trance versetzt werden – Werte werden induziert, implantiert oder eingebettet
- Kontrollfluss als Trance-Tiefe metaphorisiert wird – tiefere Verschachtelung = tiefere Trance
- Funktionen als hypnotische Suggestions wirken – sie beeinflussen den Zustand des Programms
- Fehler als "Erwachen aus der Trance" behandelt werden – unerwartete Zustände durchbrechen den Flow
- Konsistenz: Alle Sprachelemente folgen der hypnotischen Metapher
- Lesbarkeit: Trotz esoterischer Begriffe bleibt die Struktur vertraut
- Modernität: Unterstützung für Pattern Matching, Async/Await, Type Safety
- Vollständigkeit: Umfangreiche Standardbibliothek für praktische Anwendungen
- Spaß: Die Sprache soll zum Experimentieren einladen und unterhalten
Kerneigenschaften:
- Turing-vollständig
- Statisches Typsystem mit Typ-Inferenz
- Objektorientierung mit Session-Konzept
- Funktionale Programmierung (First-Class Functions, Closures, Lambda)
- Pattern Matching
- Async/Await für asynchrone Operationen
- Umfassende Standardbibliothek
- Module-System für Code-Organisation
- Groß- und Kleinschreibung: In dieser Definition gehen wir davon aus, dass Schlüsselwörter case-sensitive sind und stets in Kleinschreibung geschrieben werden.
- Kommentare:
- Einzeilig:
// Kommentar - Mehrzeilig:
/* ... */
- Einzeilig:
Focus, Relax,
entrance, finale,
if, else, when, otherwise,
while, loop, pendulum,
snap, sink, sinkTo,
suggestion, mesmerize, awaken, await, surrenderTo, call,
entrain,
induce, implant, embed, freeze, sharedTrance,
observe, whisper, command, murmur,
mindLink, from, external,
session, constructor,
expose, conceal, dominant,
tranceify, anchor, trigger, oscillate,
drift, suspend, pauseReality, accelerateTime, decelerateTime,
deepFocus, deeperStill,
trance, subconscious, lucid,
number, string, boolean,
true, false,
youAreFeelingVerySleepy, lookAtTheWatch, fallUnderMySpell,
youCannotResist, yourEyesAreGettingHeavy, goingDeeper,
underMyControl, resistanceIsFutile, lucidFallback, dreamReach
Hinweis: Zusätzliche hypnotische Begriffe findest du in Kapitel „Erweiterte Konzepte“.
- Zuweisung:
= - Arithmetisch:
+,-,*,/,% - Vergleich:
==,!=,>,>=,<,<=(ergänzt durch hypnotische Synonyme, siehe 3.5.3) - Logisch:
&&,||,! - Nullish/Optional:
??,?.(aliaslucidFallback,dreamReach) - Trennzeichen/Klammern:
;,,,(,),{,},[,]
- Syntax:
- Beginnend mit einem Buchstaben
a-z/A-Zoder_ - Gefolgt von beliebigen Buchstaben, Ziffern
0-9oder_
- Beginnend mit einem Buchstaben
Beispiele: counter, myVar2, _hiddenField.
Schlüsselwörter dürfen nicht als Bezeichner verwendet werden.
- Numerisch:
42,3.14 - String:
"Hello Trance!"(Escapes optional, z. B.\") - Boolean:
true,false
Hinweis: Der Fantasietyp
trancebesitzt keine Literale, eignet sich aber als Typannotation.
HypnoScript residiert in einer statisch getypten, aber äußerst suggestiven Traumwelt. Jede Variable kann – muss aber nicht – einen sichtbaren Typ tragen. Fehlt die Annotation, induziert der Interpreter den Typ via Trance-Intuition.
- Basistypen:
number,string,boolean,trance(für bewusstseinserweiterte Payloads). - Modifier:
lucidmarkiert Werte als optional/entrückt (lucid string≙string | null | undefined). - Kombinationen: Union (
typeA | typeB) und Intersection (typeA & typeB) werden unterstützt – passend zu verschmelzenden Trancezuständen. - Generics: Funktionen, Sessions und
tranceify-Typen können Typparameter verwenden (suggestion anchor<T>(value: T): T). - Optionale Felder: Das Suffix
?auf einem Feld/einer Signatur kennzeichnet „sanft mögliche“ Werte. - Nullish-Handling: Der Operator
lucidFallback(Alias für??) unddreamReach(Alias für?.) helfen, schlafwandelnde Werte sicher zu berühren.
induce guestCount: number = 42;
induce mantra: lucid string; // optionaler Wert
induce guestRegistry = { entries: [] };
tranceify HypnoGuest<TMemory> {
name: string;
memory: TMemory;
isInTrance: boolean;
suggestionLevel?: number;
}
suggestion summonEcho<T>(value: T | trance, fallback: T): T {
awaken value lucidFallback fallback;
}
observe guestRegistry dreamReach entries lucidFallback [];
Hinweis:
lucidFallback(??) unddreamReach(?.) sind syntaktischer Zucker für Nullish-Coalescing und Optional-Chaining – passend ins hypnotische Bühnenbild übersetzt.
Ein einfaches HypnoScript-Programm wird von Focus { ... } Relax umschlossen. Innerhalb dieses Blocks stehen Deklarationen, Funktionen und Anweisungen.
Beispiel:
Focus {
// Programmcode
} Relax
Optionale Besonderheit:
entrance { ... }kann als „Startblock“ dienen.- Wenn vorhanden, wird der Code im
entrance-Block zuerst ausgeführt. - Ist kein
entrance-Block definiert, wird das Programm z. B. von oben nach unten abgearbeitet oder folgt anderen Implementierungsdetails.
- Wenn vorhanden, wird der Code im
induce x: number = 5;
induce y: string = "Hallo";
- Mit oder ohne Initialisierung.
- Input:
induce name: string from external;– kann (fiktiv) einen Wert von außen einlesen.
suggestion add(a: number, b: number): number {
awaken a + b;
}
-
Aufruf:
add(2, 3); // oder call add(2, 3); -
Rückgabe:
awaken <Ausdruck>;(analog zureturn). -
Modifiers:
mesmerize suggestionerzeugt asynchrone Funktionen,imperative suggestionkennzeichnet Prozeduren,dominant suggestionstatische/bibliothekarische Hooks.
Hinweis: Für Funktionen ohne Rückgabewert kann man wahlweise
imperative suggestionverwenden (siehe 3.5).
if (x > 0) {
observe "x ist positiv";
} else {
observe "x ist nicht positiv";
}
-
deepFocusals optionaler Ersatz für{ }-Blöcke:if (counter > 5) deepFocus { observe "Counter > 5"; } else deepFocus { observe "Counter <= 5"; }
while:
while (counter < 10) {
observe counter;
counter = counter + 1;
}
loop (ähnlich for in C/JavaScript):
loop (induce i: number = 0; i < 5; i = i + 1) {
observe i;
}
snap;: bricht Schleife ab (analogbreak).sink;: springt zum nächsten Durchlauf (analogcontinue).
- Geschweifte Klammern
{ ... }oder optionaldeepFocus { ... }als Block. - Mehrere Anweisungen können in einem Block stehen.
Ermöglicht „Klassen“ in HypnoScript:
session Person {
expose name: string;
conceal secretId: number;
suggestion constructor(newName: string, id: number) {
this.name = newName;
this.secretId = id;
}
suggestion greet() {
observe "Hello from " + this.name;
}
}
-
Instanziierung:
induce p = Person("Alice", 123); p.greet(); -
expose: Feld/Methoden sind öffentlich (zugreifbar von außen). -
conceal: Feld/Methoden sind privat (nur innerhalb der Session). -
constructor: Spezialmethode, die bei Instanzierung aufgerufen wird. -
dominant suggestion: (optional) für statische Methoden (z. B.MathWizard.power(a,b)).
Fügt eine Verzögerung oder Blockade für ms Millisekunden ein:
observe "Starte Hypnose...";
drift(3000);
observe "...Nach 3 Sekunden geht's weiter.";
Hinweis: Die konkrete Warte-Strategie hängt von Interpreter oder Runtime ab.
Wo andere Sprachen nüchtern vergleichen, flüstert HypnoScript beschwörende Formeln. Jede Vergleichs- und Logikoperation besitzt ein theatrales Alias, das exakt dieselbe Semantik behält – nur viel mehr Show liefert.
| Standard-Operator | Hypnotisches Synonym | Bedeutung |
| ----------------- | ------------------------- | ------------------- | -------------------- | -------------- |
| == | youAreFeelingVerySleepy | Gleichheit |
| != | youCannotResist | Ungleichheit |
| > | lookAtTheWatch | Größer als |
| < | fallUnderMySpell | Kleiner als |
| >= | yourEyesAreGettingHeavy | Größer oder gleich |
| <= | goingDeeper | Kleiner oder gleich |
| && | underMyControl | Logisches UND |
| | | | resistanceIsFutile | Logisches ODER |
| Konstruktion | Hypnotisches Synonym | Wirkung |
|---|---|---|
?? |
lucidFallback |
Nullish-Coalescing |
?. |
dreamReach |
Optional-Chaining auf Objekten |
?.[ |
dreamReach[ |
Optionaler Indexzugriff |
?.( |
dreamReach( |
Optionaler Funktionsaufruf |
Die Synonyme können frei mit den Standardoperatoren gemischt werden. Für konsistente Hypnose empfiehlt es sich, pro Datei einen Stil zu wählen.
induce age: number = 22;
induce license: boolean = true;
if (age lookAtTheWatch 18 underMyControl license youAreFeelingVerySleepy true) {
observe "Du darfst fahren!";
}
induce guest = { profile: { alias: "Hypna" } };
induce dossier = guest dreamReach profile lucidFallback {};
observe dossier;
induce x: number = 7;
induce y: number = 42;
if (x goingDeeper 100 resistanceIsFutile y yourEyesAreGettingHeavy 50) {
command "Bedingung erfüllt – trance tiefer!";
}
induce password: string = "secret";
if (password youCannotResist "trance123") {
observe "Falsches Passwort!";
}
Erlaubt das Definieren eigener Datensammlungen (Records oder einfache Objekte):
tranceify HypnoRecord {
name: string;
age: number;
isInTrance: boolean;
}
induce r = HypnoRecord {
name: "Alice",
age: 30,
isInTrance: true
};
observe r.name;
- Weist Felder per
{ feldname: wert, ... }zu. - Intern kann dies wie eine struct oder ein Record behandelt werden.
entrain ist HypnoScripts Pattern-Matching und wirkt wie ein sanftes Einschwingen auf unterschiedliche Bewusstseinslagen. Der Ausdruck wird einmal evaluiert, anschließend werden die when-Klauseln der Reihe nach geprüft. Die erste passende Suggestion gewinnt; otherwise dient als Fallback.
- Literale (
when 0,when "Spirale"). - Typ-Patterns mit optionaler Bindung (
when value: number). - Destrukturierung von
tranceify-Records und Arrays (when HypnoGuest { name, isInTrance: true }). - Guards mit
iffür zusätzliche Bedingungen. - Spread-Operator
...restinnerhalb von Array-Pattern.
induce input: any = HypnoGuest<{ tranceDepth: number }> {
name: "Luna",
memory: { tranceDepth: 7 },
isInTrance: true,
suggestionLevel: 5,
};
entrain input {
when 0 => command "Nullpunkt erreicht.";
when value: number if value lookAtTheWatch 0 => command "Positive Schwingung!";
when HypnoGuest { name, isInTrance: true } => observe name + " ist tief in Trance.";
when [first, ...rest] => observe "Liste startet mit " + first;
otherwise => observe "Unbekannter Bewusstseinszustand";
}
Jede when-Klausel kann awaken verwenden, um einen Wert zurückzugeben. entrain selbst ist also ein Ausdruck und lässt sich direkt einer Variable zuweisen.
Für Operationen, die im Hintergrund schweben, markiert mesmerize eine Funktion als hypnotisch-asynchron. Der Rückgabewert entspricht einem Promise; await (alias surrenderTo) löst die Suggestion auf.
mesmerize suggestion lullaby(): number {
drift(1200);
awaken 42;
}
Focus {
induce answer: number = await lullaby();
observe "Antwort aus dem Traum: " + answer;
induce secondAnswer: number = surrenderTo lullaby();
observe "Alias funktioniert ebenso.";
} Relax
mesmerize kann mit session kombiniert werden, um hypnotische Services zu definieren. Innerhalb von mesmerize-Funktionen stehen parallelTrance und scheduleAwakening aus der Standardbibliothek zur Verfügung.
Das Modul-System bildet die Bühne, auf der mehrere Skripte gemeinsam schwingen.
mindLink "./rituals/spiral.hyp";
mindLink { chant as deepChant } from "./choir.hyp";
sharedTrance freeze stageLighting: string = "violett";
sharedTrance induce visitorCount: number = 0;
imperative suggestion incrementVisitors() {
visitorCount = visitorCount + 1;
deepChant();
}
mindLinklädt Module; benannte Importe funktionieren wie in modernen JS-Ökosystemen.sharedTrancedeklariert modulweite Zustände (ggf. mitfreeze).manifest(optional) kann verwendet werden, um Assets zu exportieren (Implementierungsdetail des Toolings).
trigger ist ein mächtiges Werkzeug zum Definieren von Top-Level Event-Hooks, Callbacks und verzögerten Aktionen. Ein Trigger bindet eine Funktions-Expression an einen Bezeichner auf Programm- oder Modul-Ebene und kann später explizit aufgerufen oder als Reaktion auf bestimmte Ereignisse ausgelöst werden.
Syntax:
// Nur auf Top-Level (außerhalb von Funktionen/Sessions/Blöcken)
trigger triggerName = suggestion(parameterList) {
// Trigger-Code
};
Eigenschaften:
- Top-Level Only: Triggers können nur auf Programm- oder Modul-Ebene deklariert werden (nicht innerhalb von Funktionen, Sessions oder Blöcken)
- Deklarativ: Triggers werden wie Variablen deklariert, binden aber Funktionslogik
- First-Class: Können als Parameter übergeben, in Datenstrukturen gespeichert und dynamisch aufgerufen werden
- Event-Orientiert: Ideal für Event-Handler, Callbacks, Cleanup-Aktionen und verzögerte Ausführungen
- Kombination mit Bibliotheken: Perfekt mit
repeatAction,delayedSuggestion,awakenAfteraus DeepMind/AuraAsync
Verwendungsmuster:
- Cleanup-Trigger: Aufräumaktionen nach Programmende (oft in
finale-Blöcken) - Event-Handler: Reaktion auf Benutzer-Interaktionen oder Systemereignisse
- Callback-Funktionen: Als Parameter für höhere Funktionen (DeepMind, MemoryPalace)
- State-Management: Zustandsänderungs-Handler in komplexen Sessions
Focus {
induce resourceHandle: number = 42;
trigger onCleanup = suggestion() {
command "Ressourcen werden freigegeben...";
resourceHandle = 0;
observe "Cleanup abgeschlossen.";
};
// Programm-Logik...
observe "Hauptprogramm läuft...";
finale {
onCleanup(); // Expliziter Aufruf des Triggers
}
} Relax
Focus {
induce counter: number = 0;
trigger onTick = suggestion() {
counter = counter + 1;
observe "Tick " + counter;
};
// Verwende Trigger mit DeepMind
repeatAction(5, onTick);
observe "Finale Zählung: " + counter;
} Relax
Focus {
trigger onError = suggestion(errorCode: number, message: string) {
command "⚠️ FEHLER " + errorCode + ": " + message;
drift(1000);
};
induce x: number = 10;
if (x lookAtTheWatch 100) {
onError(404, "Wert zu groß!");
}
} Relax
// Trigger als Top-Level-Deklaration außerhalb der Session
trigger onSecondElapsed = suggestion(timer: HypnoTimer) {
timer.elapsedSeconds = timer.elapsedSeconds + 1;
observe "Verstrichene Zeit: " + timer.elapsedSeconds + "s";
};
session HypnoTimer {
expose elapsedSeconds: number;
suggestion constructor() {
this.elapsedSeconds = 0;
}
suggestion start() {
// Verwende externen Trigger mit Partial Application
induce boundTick = suggestion() {
onSecondElapsed(this);
};
repeatAction(10, boundTick);
}
}
Focus {
induce timer = HypnoTimer();
timer.start();
} Relax
Unterschied zu normalen Funktionen:
| Aspekt | suggestion |
trigger |
|---|---|---|
| Deklaration | suggestion name(params): type { ... } |
trigger name = suggestion(params) { ... } |
| Gültigkeitsbereich | Block-Level (lokal/global) | Nur Top-Level (Programm/Modul-Scope) |
| Semantik | Wiederverwendbare Funktion | Event-Handler/Callback |
| Verwendung | Allgemeine Logik | Ereignisgesteuert |
| Konvention | Algorithmen, Berechnungen | Reaktionen, Cleanup, Events |
Wichtige Einschränkungen:
triggerkann nur auf Top-Level deklariert werden (nicht innerhalb von Sessions, Funktionen oder Blöcken)- Für Callback-Felder in Sessions verwende anonyme
suggestion-Expressions direkt:this.callback = suggestion() { ... }; - Triggers können als Werte zugewiesen und als Parameter übergeben werden (First-Class)
Alternative: Anonyme Suggestion-Expressions für lokale Callbacks
Wenn du Callbacks innerhalb von Sessions oder Funktionen benötigst, verwende direkt anonyme suggestion-Expressions:
session MySession {
conceal localCallback: suggestion;
suggestion constructor() {
// Anonyme suggestion-Expression (kein trigger!)
this.localCallback = suggestion(value: number) {
observe "Callback aufgerufen mit: " + value;
};
}
}
Best Practices:
- Verwende
triggerfür Top-Level Event-Handler und globale Callbacks - Benenne Triggers mit Präfix
onfür Klarheit (onAwaken,onError,onComplete) - Für lokale Callbacks innerhalb von Sessions/Funktionen: nutze anonyme
suggestion() { ... } - Kombiniere mit
finale-Blöcken für garantierte Ausführung - Nutze Triggers in Kombination mit DeepMind-Funktionen für elegante Kontrollflüsse
Hinweis: Trigger sind syntaktischer Zucker für Funktions-Expressions mit event-orientierter Semantik. Intern werden sie als First-Class Functions behandelt.
Eine Auswahl weiterer Sprachjuwelen, die den Hypnose-Charakter abrunden:
imperative suggestion: Prozedur ohne Rückgabewert.anchor: Zustand sichern (Snapshot einer Variablen).oscillate,pendulum: Toggler und bidirektionale Schleifen.suspend: Pausiert ohne festes Ende, bis ein Trigger aufweckt.freeze: Macht Variablen unveränderlich.whisper,command,murmur: Ausgabestufen vom Flüstern bis zur Autorität.implant/embed: Alternativen zuinducefür tiefere Speicheroperationen.subconscious: Zugriff auf verborgene Speicherbereiche.sinkTo label;: Goto-artiger Sprung für dramatische Effekte – möglichst sparsam einsetzen.finale { ... }: Aufräum- und Abschlussblock nach dem Hauptprogramm.
Siehe auch 3.5.8 Trigger für vollständige Event-Hook-Dokumentation.
sharedTrance freeze mantraText: string = "Atme ein, atme aus";
Focus {
anchor baselineDepth = 3;
induce isDeepening: boolean = false;
oscillate isDeepening;
if (isDeepening) {
observe "Trance wird vertieft auf Level: " + baselineDepth;
}
pendulum (induce i: number = 0; i fallUnderMySpell 3) {
whisper mantraText + " (" + i + ")";
drift(300);
}
trigger onAwaken = suggestion() {
command "Du bist wieder ganz da.";
};
// Nostalgischer Sprung, bitte nur im Ausnahmefall:
myLabel:
baselineDepth = baselineDepth - 1;
if (baselineDepth fallUnderMySpell 1) sinkTo myLabel;
finale {
onAwaken();
}
} Relax
Hinweis: Viele dieser Features sind Zuckerguss. Für produktive Hypnose gilt – dosiert einsetzen, damit niemand aus der Trance fällt.
Nachfolgend eine beispielhafte EBNF-Skizze, die die Kernsyntax (ohne alle Operator-Synonyme) abbildet. Die Synonyme (youAreFeelingVerySleepy, etc.) könnten in der Praxis direkt auf die Standardoperatoren gemappt werden.
Program ::= "Focus" Block [ FinaleBlock ] "Relax" ;
Block ::= { Statement } ;
Statement ::= VarDeclarationStatement
| SharedTranceDeclaration
| FreezeStatement
| MindLinkStatement
| EntrainStatement
| IfStatement
| WhileStatement
| LoopStatement
| PendulumStatement
| BreakStatement
| ContinueStatement
| FunctionDeclaration
| TriggerDeclaration
| ReturnStatement
| ObserveStatement
| WhisperStatement
| CommandStatement
| DriftStatement
| AnchorStatement
| OscillateStatement
| SessionDeclaration
| TranceifyDeclaration
| EntranceBlock
| FinaleBlock
| LabelStatement
| SinkToStatement
| BlockStatement
| ExpressionStatement ;
BlockStatement ::= [ "deepFocus" | "deeperStill" ] "{" { Statement } "}" ;
EntranceBlock ::= "entrance" BlockStatement ;
FinaleBlock ::= "finale" BlockStatement ;
VarDeclarationStatement
::= ("induce" | "implant" | "embed") Identifier [ ":" Type ] [ "=" Expression ] ";"
| ("induce" | "implant") Identifier [ ":" Type ] "from" "external" ";" ;
SharedTranceDeclaration
::= "sharedTrance" ("freeze" | "induce" | "implant" | "embed")
Identifier [ ":" Type ] [ "=" Expression ] ";" ;
FreezeStatement ::= "freeze" Identifier ":" Type "=" Expression ";" ;
MindLinkStatement
::= "mindLink" StringLiteral [ "as" Identifier ] ";"
| "mindLink" "{" ImportList "}" "from" StringLiteral ";" ;
ImportList ::= ImportSpecifier { "," ImportSpecifier } ;
ImportSpecifier ::= Identifier [ "as" Identifier ] ;
ObserveStatement ::= "observe" Expression ";" ;
WhisperStatement ::= "whisper" Expression ";" ;
CommandStatement ::= "command" Expression ";" ;
DriftStatement ::= ("drift" | "pauseReality") "(" Expression ")" ";"
| "suspend" ";" ;
AnchorStatement ::= "anchor" Identifier "=" Expression ";" ;
OscillateStatement ::= "oscillate" Identifier ";" ;
LabelStatement ::= Identifier ":" ;
SinkToStatement ::= "sinkTo" Identifier ";" ;
PendulumStatement
::= "pendulum" "(" [ VarDeclarationStatementNoSemicolon ]
";" Expression ";" Expression ")"
BlockStatement ;
IfStatement ::= "if" "(" Expression ")" BlockStatement [ "else" BlockStatement ] ;
WhileStatement ::= "while" "(" Expression ")" BlockStatement ;
LoopStatement ::= "loop" "(" [ VarDeclarationStatementNoSemicolon ]
";" Expression ";" Expression ")" BlockStatement ;
BreakStatement ::= "snap" ";" ;
ContinueStatement::= "sink" ";" ;
FunctionDeclaration
::= FunctionModifier Identifier "(" [ ParameterList ] ")" [ ":" Type ]
BlockStatement ;
FunctionModifier ::= [ "mesmerize" ] ( "suggestion"
| "imperative suggestion"
| "dominant suggestion" ) ;
TriggerDeclaration
::= "trigger" Identifier "=" FunctionExpression ";" ;
FunctionExpression
::= [ "mesmerize" ] "suggestion" "(" [ ParameterList ] ")"
BlockStatement ;
ParameterList ::= Parameter { "," Parameter } ;
Parameter ::= Identifier [ ":" Type ] ;
ReturnStatement ::= "awaken" [ Expression ] ";" ;
ExpressionStatement
::= Expression ";" ;
Expression ::= AssignmentExpression ;
AssignmentExpression
::= LogicalOrExpression [ "=" AssignmentExpression ] ;
LogicalOrExpression
::= LogicalAndExpression { ( "||" | "resistanceIsFutile" ) LogicalAndExpression } ;
LogicalAndExpression
::= EqualityExpression { ( "&&" | "underMyControl" ) EqualityExpression } ;
EqualityExpression
::= RelationalExpression { EqualityOperator RelationalExpression } ;
EqualityOperator ::= "==" | "!=" | "youAreFeelingVerySleepy" | "youCannotResist" ;
RelationalExpression
::= AdditiveExpression { RelationalOperator AdditiveExpression } ;
RelationalOperator
::= ">" | ">=" | "<" | "<="
| "lookAtTheWatch" | "yourEyesAreGettingHeavy"
| "fallUnderMySpell" | "goingDeeper" ;
AdditiveExpression
::= MultiplicativeExpression { ( "+" | "-" ) MultiplicativeExpression } ;
MultiplicativeExpression
::= UnaryExpression { ( "*" | "/" | "%" ) UnaryExpression } ;
UnaryExpression ::= ( "await" | "surrenderTo" ) UnaryExpression
| [ ("+" | "-" | "!") ] PrimaryExpression ;
PrimaryExpression
::= Identifier
| Literal
| "(" Expression ")"
| FunctionCall
| FunctionExpression
| EntrainExpression ;
FunctionCall ::= [ "call" ] Identifier "(" [ ArgumentList ] ")" ;
EntrainExpression
::= "entrain" Expression "{" EntrainClause { EntrainClause } [ EntrainDefault ] "}" ;
EntrainStatement ::= EntrainExpression ";" ;
EntrainClause ::= "when" Pattern [ "if" Expression ] "=>" BlockStatement ;
EntrainDefault ::= "otherwise" "=>" BlockStatement ;
Pattern ::= Literal
| Identifier
| Identifier ":" Type
| Identifier "{" RecordPatternEntry { "," RecordPatternEntry } "}"
| "[" [ Pattern { "," Pattern } [ "," "..." Identifier ] ] "]" ;
RecordPatternEntry ::= Identifier [ ":" Pattern ] [ "=" Expression ] ;
ArgumentList ::= Expression { "," Expression } ;
SessionDeclaration
::= "session" Identifier "{" { SessionMember } "}" ;
SessionMember ::= ( "expose" | "conceal" )?
( VarDeclarationStatementNoSemicolon
| FunctionDeclaration
| ConstructorDeclaration ) ;
ConstructorDeclaration
::= "suggestion" "constructor" "(" [ ParameterList ] ")" BlockStatement ;
TranceifyDeclaration
::= "tranceify" Identifier "{" { VarDefinition } "}" ;
VarDefinition ::= Identifier ":" Type ";" ;
VarDeclarationStatementNoSemicolon
::= ("induce" | "implant" | "embed") Identifier [ ":" Type ] [ "=" Expression ]
| ("induce" | "implant") Identifier [ ":" Type ] "from" "external" ;
Literal ::= NumericLiteral | StringLiteral | BooleanLiteral ;
NumericLiteral ::= Digit { Digit } [ "." Digit { Digit } ] ;
StringLiteral ::= '"' { <char außer '"' oder Zeilenumbruch> } '"' ;
BooleanLiteral ::= "true" | "false" ;
Type ::= "number" | "string" | "boolean" | "trance" | Identifier ;
Digit ::= [0-9] ;induce varName: type = expr;: Deklariert eine lokale Variable im aktuellen Block.- Gültigkeit: Variablen sind innerhalb des Blockes und seiner Unterblöcke sichtbar (lexikalischer Scope).
- Zuweisung:
varName = expr;ändert den Wert einer bereits deklarierten Variable. - Eingabe:
from externalsimuliert Benutzer-/Dateiinput (Implementation abhängig).
observe expr;: Gibt den Wert vonexpr(z. B. String, Zahl, boolean) an das „Trance-Log“ aus (Konsole, UI, etc.).drift(ms);: Unterbricht / pausiert den Programmfluss (themenbedingt „Verzögerung in Trance“).
- Schleifen (while, loop) bzw. Rekursion ermöglichen beliebig lange bzw. wiederholende Prozesse.
- Bedingte Verzweigungen (if/else) erlauben dynamische Pfadwahl.
- Variablen speichern veränderbare Werte.
Diese Faktoren reichen aus, um Turing-Vollständigkeit zu gewährleisten.
HypnoScript kennt Ausnahmen als Nightmares. Sobald ein Nightmare ausgelöst wird, bricht die aktuelle Suggestion ab, bis eine passende Recovery-Suggestion eingreift.
tryOrAwaken(action, recovery): Führtactionaus und ruft bei Nightmarerecoveryauf.ensureAwakening(action, cleanup): Stellt sicher, dasscleanupausgeführt wird (ähnlichfinally).lucidFallback: Ausdrucksebene für Nullish- bzw. Fehler-Ersatzwerte.dreamReach: Optional-Chaining schützt vorsubconscious-Nullzuständen.
tryOrAwaken(
suggestion() {
surrenderTo fetchSuggestion("https://hypno.api/session");
},
suggestion(nightmare: Nightmare) {
murmur "Albtraum: " + nightmare.message;
observe "Wir atmen tief durch und versuchen es erneut.";
}
);
ensureAwakening(
suggestion() { openVault(); },
suggestion() { closeVault(); }
);
Asynchrone Suggestionen (mesmerize, await) und die Bibliotheken AuraAsync sowie DeepMind ermöglichen nebeneinander laufende Hypnosen.
parallelTrancestartet mehrere Suggestionen gleichzeitig und wartet auf Abschluss.sequentialTranceerzwingt Reihenfolge, nützlich beim Aktualisieren vonsharedTrance-Zuständen.auraToken/cancelSuggestionerlauben Abbrüche.sharedTrance-Variablen sind per Definition threadsicher; für kritische Abschnitte kannanchor+oscillatezur Koordination genutzt werden.
Focus {
sharedTrance induce stage: string = "warmup";
parallelTrance([
suggestion() { stage = "intro"; surrenderTo lullaby(); },
suggestion() { observe "Publikum zählt rückwärts"; }
]);
sequentialTrance([
suggestion() { stage = "climax"; },
suggestion() { command "3...2...1..."; }
]);
} Relax
Die HypnoScript-Standardbibliothek bietet eine umfassende Sammlung von hypnotisch benannten Funktionen und Modulen, die häufige Programmieraufgaben vereinfachen. Alle Bibliotheksfunktionen folgen dem hypnotischen Thema und verwenden suggestive Bezeichnungen.
Die Kernbibliothek stellt grundlegende Funktionen für Typkonvertierung und Basisdatenmanipulation bereit.
// Typkonvertierungen
suggestion toNumber(value: string): number
suggestion toString(value: number): string
suggestion toBoolean(value: any): boolean
// Typ-Prüfungen
suggestion isNumber(value: any): boolean
suggestion isString(value: any): boolean
suggestion isBoolean(value: any): boolean
suggestion isTranced(value: any): boolean // Prüft, ob Wert in "Trance" ist (null/undefined)
// Grundlegende Utilities
suggestion clone(obj: any): any // Tiefe Kopie eines Objekts
suggestion absorb(target: any, source: any): any // Merge von Objekten (hypnotisches "merge")
suggestion reflect(value: any): string // Gibt Typ-Information zurück
Beispiel:
Focus {
induce numStr: string = "42";
induce num: number = toNumber(numStr);
observe "Konvertiert: " + num;
if (isNumber(num)) {
observe "Es ist eine Zahl!";
}
} Relax
Das Hypno-Math-Modul bietet erweiterte mathematische Funktionen mit hypnotischen Namen.
// Grundlegende Operationen
suggestion power(base: number, exponent: number): number // Potenzierung
suggestion squareRoot(n: number): number // Quadratwurzel (visualisiere die Spirale...)
suggestion absoluteDepth(n: number): number // Absolutwert (Tiefe ist immer positiv)
// Rundungsfunktionen
suggestion ceiling(n: number): number // Aufrunden (aufsteigen aus der Trance)
suggestion floor(n: number): number // Abrunden (sinken in die Trance)
suggestion roundToNearest(n: number): number // Runden zur nächsten Ganzzahl
// Trigonometrische Funktionen (Pendel-Bewegungen)
suggestion pendulumSin(angle: number): number // sin
suggestion pendulumCos(angle: number): number // cos
suggestion pendulumTan(angle: number): number // tan
// Erweiterte Funktionen
suggestion spiralLog(n: number): number // Logarithmus (Spirale nach innen)
suggestion spiralExp(n: number): number // Exponentialfunktion (Spirale nach außen)
suggestion hypnoticPi(): number // π (3.14159...)
suggestion hypnoticE(): number // e (2.71828...)
// Min/Max (Dominant/Submissive Auswahl)
suggestion selectDominant(a: number, b: number): number // max
suggestion selectSubmissive(a: number, b: number): number // min
suggestion clampBetween(value: number, min: number, max: number): number // Begrenzt Wert
// Zufallsfunktionen (Unbewusste Entscheidungen)
suggestion unconsciousChoice(): number // Zufallszahl zwischen 0 und 1
suggestion unconsciousInt(min: number, max: number): number // Zufallsganzzahl
suggestion unconsciousBool(): boolean // Zufälliger boolean
Beispiel:
Focus {
induce radius: number = 5.0;
induce area: number = hypnoticPi() * power(radius, 2);
observe "Kreisfläche: " + area;
induce angle: number = 45.0;
induce sine: number = pendulumSin(angle);
observe "Sinus von " + angle + " Grad: " + sine;
induce randomNum: number = unconsciousInt(1, 100);
observe "Zufällige Zahl: " + randomNum;
} Relax
StringSpell bietet mächtige String-Manipulationsfunktionen mit hypnotischen Metaphern.
// Länge und Zugriff
suggestion measureDepth(str: string): number // Länge des Strings
suggestion extractEssence(str: string, index: number): string // Zeichen an Position
suggestion sliceMemory(str: string, start: number, end: number): string // Substring
// Suchen und Ersetzen
suggestion findPattern(str: string, pattern: string): number // indexOf
suggestion containsPattern(str: string, pattern: string): boolean // includes
suggestion replaceMemory(str: string, old: string, new: string): string // replace
suggestion replaceAllMemories(str: string, old: string, new: string): string // replaceAll
// Transformation
suggestion toUpper(str: string): string // In Großbuchstaben (LAUTER BEFEHL)
suggestion toLower(str: string): string // In Kleinbuchstaben (sanftes Flüstern)
suggestion trimEdges(str: string): string // Entfernt Whitespace an den Rändern
suggestion reverseTrance(str: string): string // Kehrt String um
// Zerlegung und Zusammenfügung
suggestion fragmentMemory(str: string, delimiter: string): string[] // split
suggestion mergeThoughts(arr: string[], separator: string): string // join
suggestion repeatMantra(str: string, times: number): string // String wiederholen
// Prüfungen
suggestion startsWithSuggestion(str: string, prefix: string): boolean
suggestion endsWithAwakening(str: string, suffix: string): boolean
suggestion matchesPattern(str: string, regex: string): boolean // Regex-Match
Beispiel:
Focus {
induce message: string = " Willkommen in der Trance ";
induce cleaned: string = trimEdges(message);
observe cleaned;
induce words: string[] = fragmentMemory(cleaned, " ");
observe "Anzahl Wörter: " + vaultSize(words);
induce mantra: string = repeatMantra("Om ", 3);
observe mantra; // "Om Om Om "
induce reversed: string = reverseTrance("Trance");
observe reversed; // "ecnarT"
} Relax
MemoryPalace bietet Funktionen für Arrays und erweiterte Datenstrukturen.
// Array-Grundfunktionen
suggestion createVault(size: number): any[] // Erstellt Array mit Größe
suggestion storeMemory(arr: any[], value: any): number // push - gibt neue Länge zurück
suggestion retrieveLastMemory(arr: any[]): any // pop
suggestion peekAtMemory(arr: any[], index: number): any // Array-Zugriff
suggestion implantMemory(arr: any[], index: number, value: any) // Setze Wert an Index
// Array-Manipulation
suggestion reverseMemories(arr: any[]): any[] // Kehrt Array um
suggestion sortMemories(arr: any[]): any[] // Sortiert Array
suggestion filterMemories(arr: any[], predicate: suggestion): any[] // filter
suggestion mapMemories(arr: any[], transformer: suggestion): any[] // map
suggestion reduceToEssence(arr: any[], reducer: suggestion, initial: any): any // reduce
// Array-Suche
suggestion findMemory(arr: any[], value: any): number // indexOf
suggestion containsMemory(arr: any[], value: any): boolean // includes
suggestion countOccurrences(arr: any[], value: any): number // Zählt Vorkommen
// Array-Info
suggestion vaultSize(arr: any[]): number // Länge
suggestion isEmptyVault(arr: any[]): boolean // Ist leer
suggestion firstMemory(arr: any[]): any // Erstes Element
suggestion lastMemory(arr: any[]): any // Letztes Element
// Erweiterte Strukturen (Maps/Dictionaries)
session MemoryMap {
expose suggestion constructor()
expose suggestion store(key: string, value: any)
expose suggestion retrieve(key: string): any
expose suggestion forget(key: string)
expose suggestion hasKey(key: string): boolean
expose suggestion allKeys(): string[]
expose suggestion allValues(): any[]
}
// Stack (LIFO)
session MindStack {
expose suggestion constructor()
expose suggestion push(value: any)
expose suggestion pop(): any
expose suggestion peek(): any
expose suggestion isEmpty(): boolean
expose suggestion size(): number
}
// Queue (FIFO)
session ThoughtQueue {
expose suggestion constructor()
expose suggestion enqueue(value: any)
expose suggestion dequeue(): any
expose suggestion isEmpty(): boolean
expose suggestion size(): number
}
Beispiel:
Focus {
// Array-Operationen
induce memories: number[] = [1, 2, 3, 4, 5];
induce doubled = mapMemories(memories, suggestion(x: number): number {
awaken x * 2;
});
observe doubled; // [2, 4, 6, 8, 10]
// Stack verwenden
induce stack = MindStack();
stack.push(10);
stack.push(20);
stack.push(30);
observe stack.pop(); // 30
observe stack.peek(); // 20
// Map verwenden
induce map = MemoryMap();
map.store("name", "Alice");
map.store("age", 30);
observe map.retrieve("name"); // "Alice"
} Relax
TimeWarp ermöglicht Zeit- und Datumsmanipulation mit hypnotischen Konzepten.
// Aktuelle Zeit
suggestion nowInTrance(): number // Aktuelle Timestamp (Millisekunden seit Epoch)
suggestion currentMoment(): string // Aktuelles Datum/Zeit als String
// Zeit-Manipulation
suggestion pauseReality(ms: number) // Entspricht drift(ms) - pausiert Ausführung
suggestion accelerateTime(factor: number) // Beschleunigt nachfolgende Operationen (konzeptionell)
suggestion decelerateTime(factor: number) // Verlangsamt nachfolgende Operationen
// Datum-Parsing und Formatierung
suggestion parseTimeMoment(dateStr: string): number // String zu Timestamp
suggestion formatTimeMoment(timestamp: number, format: string): string // Timestamp zu formatiertem String
// Datum-Arithmetik
suggestion addDays(timestamp: number, days: number): number
suggestion addHours(timestamp: number, hours: number): number
suggestion addMinutes(timestamp: number, minutes: number): number
suggestion addSeconds(timestamp: number, seconds: number): number
suggestion differenceInDays(ts1: number, ts2: number): number
suggestion differenceInHours(ts1: number, ts2: number): number
suggestion differenceInMinutes(ts1: number, ts2: number): number
suggestion differenceInSeconds(ts1: number, ts2: number): number
// Datum-Komponenten
suggestion extractYear(timestamp: number): number
suggestion extractMonth(timestamp: number): number
suggestion extractDay(timestamp: number): number
suggestion extractHour(timestamp: number): number
suggestion extractMinute(timestamp: number): number
suggestion extractSecond(timestamp: number): number
Beispiel:
Focus {
induce now: number = nowInTrance();
observe "Aktueller Timestamp: " + now;
induce tomorrow: number = addDays(now, 1);
induce formatted: string = formatTimeMoment(tomorrow, "YYYY-MM-DD");
observe "Morgen: " + formatted;
pauseReality(2000); // Warte 2 Sekunden
observe "2 Sekunden später...";
} Relax
DeepMind bietet erweiterte Kontrollfluss- und Funktionskompositionswerkzeuge.
// Wiederholungen mit Callbacks
suggestion repeatAction(times: number, action: suggestion)
suggestion repeatUntil(condition: suggestion, action: suggestion)
suggestion repeatWhile(condition: suggestion, action: suggestion)
// Verzögerte Ausführung
suggestion delayedSuggestion(action: suggestion, delayMs: number)
suggestion scheduleAwakening(action: suggestion, timestamp: number)
// Funktionskomposition
suggestion compose(f: suggestion, g: suggestion): suggestion // f(g(x))
suggestion pipe(f: suggestion, g: suggestion): suggestion // g(f(x))
suggestion curry(f: suggestion, arg: any): suggestion // Partial application
// Bedingte Ausführung
suggestion ifTranced(condition: boolean, thenAction: suggestion, elseAction: suggestion)
suggestion switchMindState(value: any, cases: MemoryMap, defaultCase: suggestion)
// Fehlerbehandlung (Awakening from Nightmare)
suggestion tryOrAwaken(action: suggestion, recoveryAction: suggestion)
suggestion ensureAwakening(action: suggestion, cleanupAction: suggestion) // try-finally
// Async/Concurrency (Parallele Trancen)
suggestion parallelTrance(actions: suggestion[]) // Führt mehrere Aktionen parallel aus
suggestion sequentialTrance(actions: suggestion[]) // Führt Aktionen nacheinander aus
Beispiel:
Focus {
// Wiederhole eine Aktion 5 mal
repeatAction(5, suggestion() {
observe "In Trance...";
});
// Verzögerte Ausführung
observe "Vor der Verzögerung";
delayedSuggestion(suggestion() {
observe "Nach 3 Sekunden";
}, 3000);
// Bedingte Ausführung
induce x: number = 10;
ifTranced(x lookAtTheWatch 5,
suggestion() { observe "x ist größer als 5"; },
suggestion() { observe "x ist nicht größer als 5"; }
);
} Relax
SensoryInput erweitert die Ein- und Ausgabemöglichkeiten von HypnoScript.
// Ausgabe-Funktionen
suggestion observe(message: any) // Standard-Ausgabe mit Zeilenumbruch
suggestion whisper(message: any) // Ausgabe ohne Zeilenumbruch
suggestion command(message: any) // Fett/hervorgehobene Ausgabe
suggestion murmur(message: any) // Gedämpfte/Debug-Ausgabe
// Formatierte Ausgabe
suggestion observeFormatted(template: string, ...args: any[]) // String-Interpolation
suggestion observeTable(data: any[][]) // Gibt Tabelle aus
suggestion observeJson(obj: any) // Gibt JSON-formatiert aus
// Eingabe-Funktionen
suggestion requestInput(prompt: string): string // Fordert Benutzer-Eingabe an
suggestion requestNumber(prompt: string): number // Fordert Zahl an
suggestion requestConfirmation(prompt: string): boolean // Ja/Nein-Frage
suggestion requestChoice(prompt: string, options: string[]): number // Mehrfachauswahl
// Datei-I/O (konzeptionell)
suggestion absorbFromScroll(filename: string): string // Liest Datei
suggestion manifestToScroll(filename: string, content: string) // Schreibt Datei
suggestion appendToScroll(filename: string, content: string) // Hängt an Datei an
// Stream-Ausgabe (fortgeschritten)
suggestion observeStream(generator: suggestion) // Stream-basierte Ausgabe
suggestion collectThoughts(): string[] // Sammelt alle bisherigen Ausgaben
Beispiel:
Focus {
// Verschiedene Ausgabearten
observe "Normale Ausgabe";
whisper "Ohne Zeilenumbruch... ";
whisper "zusammen!";
observe ""; // Zeilenumbruch
command "WICHTIGE NACHRICHT!";
murmur "Debug-Info: x=42";
// Formatierte Ausgabe
induce name: string = "Alice";
induce age: number = 30;
observeFormatted("Name: {}, Alter: {}", name, age);
// Tabellen-Ausgabe
induce data: any[][] = [
["Name", "Alter"],
["Alice", 30],
["Bob", 25]
];
observeTable(data);
// Benutzer-Eingabe
induce userName: string = requestInput("Wie heißt du? ");
observe "Hallo, " + userName + "!";
induce userAge: number = requestNumber("Wie alt bist du? ");
if (userAge yourEyesAreGettingHeavy 18) {
observe "Du bist volljährig!";
}
} Relax
AuraAsync orchestriert hypnotische Hintergrundprozesse und liefert Kontrollstrukturen für komplexe Aufgabenketten.
mesmerize suggestion lull(ms: number): trance // Resolves nach Ablauf der Zeit
mesmerize suggestion awakenAfter(ms: number, action: suggestion) // Verzögert Aktion, liefert AuraToken
mesmerize suggestion mesmerizeAll(actions: suggestion[]): trance[] // Wartet auf alle Suggestions
mesmerize suggestion tranceRace(actions: suggestion[]): any // Liefert erstes Ergebnis
suggestion auraToken(): AuraToken // Erzeugt Abbruch-Token
suggestion cancelSuggestion(token: AuraToken) // Bricht geplante Aktion ab
Beispiel:
mesmerize suggestion stageEntry() {
observe "Vorhang zu";
await lull(1500);
command "Vorhang auf!";
}
Focus {
induce token = surrenderTo awakenAfter(5000, suggestion() { command "Applaus"; });
surrenderTo stageEntry();
cancelSuggestion(token); // optionaler Abbruch
} Relax
Hinweis:
AuraTokenist eine von AuraAsync bereitgestelltetranceify-Struktur für Cancel-Operationen.
DreamWeaver ergänzt entrain um Hilfsfunktionen, um Muster deklarativ zu beschreiben und zu validieren.
suggestion weave(target: any, pattern: PatternDefinition): boolean
suggestion captureBindings(target: any, pattern: PatternDefinition): MemoryMap
suggestion guardWith(target: any, predicate: suggestion): boolean
suggestion compileSigil(pattern: string): PatternDefinition
suggestion matchMany(values: any[], pattern: PatternDefinition): any[]
Die Bibliothek erlaubt es, häufig genutzte Muster als wiederverwendbare Sigille zu hinterlegen und sorgt für ein konsistentes Bindungs-Layout in komplexen entrain-Konstrukten.
Hinweis:
PatternDefinitionist eintranceify-Record, der Pattern-Strukturen, Guards und Metadaten bündelt.
Stagecraft Visions steuert visuelle und auditive Effekte für Bühnen-Hypnosen, Dashboards oder CLI-Inszenierungen.
suggestion renderSpiral(frames: number) // ASCII-/Canvas-Spirale erzeugen
suggestion projectAura(message: string, style?: StageStyle) // Gestylte Ausgabe
suggestion dimLights(level: number) // Farben/Helligkeit anpassen
suggestion cueSoundtrack(track: string) // Hintergrundmusik triggern
suggestion presentTimeline(events: any[]): void // Timeline/Step-Visualizer rendern
HypnoNet verbindet HypnoScript mit externen Diensten, APIs und Webhooks.
mesmerize suggestion fetchSuggestion(url: string, options?: NetOptions): trance
mesmerize suggestion postSuggestion(url: string, payload: any, options?: NetOptions): trance
mesmerize suggestion openMindStream(url: string, onChunk: suggestion): AuraToken
suggestion encodeMindLink(payload: any): string
suggestion decodeMindLink(serialized: string): any
RealityAnchor verwaltet dauerhafte Ankerpunkte – Dateien, Datenbanken oder In-Memory-Vaults.
suggestion storeMemory(anchor: string, value: any)
suggestion recallMemory(anchor: string): any
suggestion forgetMemory(anchor: string)
suggestion listAnchors(): string[]
mesmerize suggestion syncVault(path: string): void
LucidDiagnostics unterstützt beim Messen, Protokollieren und Visualisieren von Trance-Zuständen.
suggestion startTracer(label: string): TraceHandle
suggestion recordLucidity(message: string)
suggestion probeDepth(action: suggestion): number
suggestion captureDreamDump(): string
suggestion withHypnoTimer(label: string, action: suggestion): number
Hinweis:
TraceHandlekapselt interne Timer- und Context-Daten und kann mitcaptureDreamDumpserialisiert werden.
Szenario: HypnoNet kombiniert mit DreamWeaver Patterns lässt sich verwenden, um externe Daten zu holen, via entrain zu analysieren und anschließend auf der Bühne mit Stagecraft glamourös aufzubereiten.
Focus {
entrance {
observe "Starte jetzt das HypnoScript-Programm...";
}
induce greeting: string = "Hello Trance!";
induce counter: number = 0;
suggestion repeatGreet(times: number) {
while (times > 0) {
observe greeting;
times = times - 1;
}
}
repeatGreet(3);
} Relax
Erwartete Ausgabe:
Starte jetzt das HypnoScript-Programm...
Hello Trance!
Hello Trance!
Hello Trance!
Focus {
// Fragt Benutzer nach einer Zahl, summiert von 1 bis zu dieser Zahl und gibt das Ergebnis aus
induce n: number from external;
induce sum: number = 0;
loop (induce i: number = 1; i <= n; i = i + 1) {
sum = sum + i;
}
observe "Die Summe von 1 bis " + n + " ist " + sum;
} Relax
Hinweis: Implementierungen müssen definieren, wie
from externalden Wert fürnbezieht.
Focus {
entrance {
observe "Willkommen in der tiefen Hypno-Welt...";
drift(2000);
observe "Wir werden nun zwei Personen hypnotisieren!";
}
session Person {
expose name: string;
suggestion constructor(newName: string) {
this.name = newName;
}
suggestion greet() {
observe "Du fühlst dich sehr entspannt, " + this.name;
}
// Hypnotische Verzögerung
suggestion slowGreet() {
greet();
observe "... Warte kurz ...";
drift(1500);
}
}
induce alice = Person("Alice");
induce bob = Person("Bob");
induce x: number = 5;
induce y: number = 5;
// Nutze Synonym: youAreFeelingVerySleepy für ==
if (x youAreFeelingVerySleepy y) {
observe "x ist gleich y!";
}
alice.slowGreet();
bob.slowGreet();
} Relax