lny-interpreter 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of lny-interpreter might be problematic. Click here for more details.
- package/.vscode/launch.json +19 -0
- package/README.md +96 -0
- package/book_ALT/LennySmartIcon1.png +0 -0
- package/book_ALT/chapter01.md +141 -0
- package/book_ALT/chapter02.md +48 -0
- package/book_ALT/chapter03.md +28 -0
- package/book_ALT/chapter04.md +19 -0
- package/book_ALT/chapter05.md +21 -0
- package/book_ALT/chapter06.md +167 -0
- package/book_ALT/chapter07.md +232 -0
- package/book_ALT/chapter08.md +200 -0
- package/book_ALT/chapter09.md +175 -0
- package/book_ALT/chapter10.md +196 -0
- package/book_ALT/deckblatt.md +60 -0
- package/book_ALT/images/Lenny01.png +0 -0
- package/book_ALT/images/Lenny02.png +0 -0
- package/book_ALT/images/Lenny03.png +0 -0
- package/book_ALT/images/Lenny04.png +0 -0
- package/book_ALT/images/Lenny05.png +0 -0
- package/book_ALT/images/Lenny06.png +0 -0
- package/book_ALT/images/Lenny07.png +0 -0
- package/book_ALT/images/Lenny08.png +0 -0
- package/book_ALT/images/Lenny09.png +0 -0
- package/book_ALT/images/Lenny10.png +0 -0
- package/book_ALT/images/Lenny11.png +0 -0
- package/book_ALT/images/Lenny12.png +0 -0
- package/book_ALT/images/Lenny13.png +0 -0
- package/book_ALT/images/Lenny14.png +0 -0
- package/book_ALT/images/Lenny15.png +0 -0
- package/book_ALT/lehrerheft.md +255 -0
- package/dist/ast/ast.d.ts +126 -0
- package/dist/ast/ast.d.ts.map +1 -0
- package/dist/ast/ast.js +3 -0
- package/dist/ast/ast.js.map +1 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1067 -0
- package/dist/browser.js.map +1 -0
- package/dist/examples.d.ts +11 -0
- package/dist/examples.d.ts.map +1 -0
- package/dist/examples.js +65 -0
- package/dist/examples.js.map +1 -0
- package/dist/i18n/i18n.d.ts +18 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +505 -0
- package/dist/i18n/i18n.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter/interpreter.d.ts +40 -0
- package/dist/interpreter/interpreter.d.ts.map +1 -0
- package/dist/interpreter/interpreter.js +415 -0
- package/dist/interpreter/interpreter.js.map +1 -0
- package/dist/lexer/lexer.d.ts +87 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +425 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lny-config.yml +6 -0
- package/dist/parser/parser.d.ts +50 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +605 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/repl.d.ts +3 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +472 -0
- package/dist/repl.js.map +1 -0
- package/dist/run-file.d.ts +2 -0
- package/dist/run-file.d.ts.map +1 -0
- package/dist/run-file.js +140 -0
- package/dist/run-file.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +72 -0
- package/dist/test.js.map +1 -0
- package/dist/world/world.d.ts +103 -0
- package/dist/world/world.d.ts.map +1 -0
- package/dist/world/world.js +416 -0
- package/dist/world/world.js.map +1 -0
- package/docs/About.md +19 -0
- package/docs/INTERPRETER.md +240 -0
- package/docs/README.md +68 -0
- package/docs/i18n/README.md +20 -0
- package/docs/lny-referenz.md +161 -0
- package/docs/lny_ueberblick.md +33 -0
- package/examples/00-demo.lny +3 -0
- package/examples/01-variable-assignment.lny +4 -0
- package/examples/02-conditional.lny +7 -0
- package/examples/03-while-loop.lny +6 -0
- package/examples/04-for-loop.lny +5 -0
- package/examples/05-lenny-movement.lny +10 -0
- package/examples/06-procedure.lny +6 -0
- package/examples/fuer-range-1.lny +4 -0
- package/examples/fuer-range-2.lny +6 -0
- package/examples/fuer-range-3.lny +6 -0
- package/examples/fuer-range-4.lny +4 -0
- package/examples/fuer-range-5.lny +6 -0
- package/examples/solange-verschachtelt.lny +12 -0
- package/favicon.ico +0 -0
- package/index.html +108 -0
- package/jest.config.js +7 -0
- package/lny-config.yml +6 -0
- package/package.json +37 -0
- package/settings.json +4 -0
- package/src/ast/ast.ts +182 -0
- package/src/browser.ts +1274 -0
- package/src/examples.ts +68 -0
- package/src/i18n/i18n.ts +537 -0
- package/src/index.ts +6 -0
- package/src/interpreter/interpreter.ts +453 -0
- package/src/lexer/lexer.ts +493 -0
- package/src/parser/parser.ts +711 -0
- package/src/repl.ts +496 -0
- package/src/test.ts +71 -0
- package/src/world/world.ts +512 -0
- package/style.css +315 -0
- package/test1.lny +2 -0
- package/tests/interpreter.test.ts +42 -0
- package/tests/parser.test.ts +18 -0
- package/tsconfig.json +19 -0
- package/vercel.json +7 -0
- package/vscode-lny/.vscode/launch.json +13 -0
- package/vscode-lny/.vscodeignore +3 -0
- package/vscode-lny/README.md +83 -0
- package/vscode-lny/language-configuration.json +19 -0
- package/vscode-lny/license.txt +21 -0
- package/vscode-lny/lny-language-0.1.0.vsix +0 -0
- package/vscode-lny/package.json +41 -0
- package/vscode-lny/snippets/lny.json +136 -0
- package/vscode-lny/syntaxes/lny.tmLanguage.json +85 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Lny 1.0 Interpreter
|
|
2
|
+
|
|
3
|
+
Ein vollständig funktionsfähiger Interpreter für die Programmiersprache **Lny 1.0**, implementiert in TypeScript. Der Interpreter unterstützt mehrere Sprachen (Deutsch, Englisch, Französisch, Spanisch, Italienisch) und kann sowohl als Konsolen-REPL als auch als Web-Anwendung verwendet werden.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
✅ **Mehrsprachige Unterstützung** - Alle Befehle und Meldungen in 5 Sprachen
|
|
8
|
+
✅ **Vollständiger Lexer & Parser** - Robuste Syntaxanalyse mit Fehlerbehandlung
|
|
9
|
+
✅ **AST-basierter Interpreter** - Sichere Codeausführung
|
|
10
|
+
✅ **Verschachtelte Ausdrücke** - Unterstützung für komplexe Ausdrücke mit Operatorpriorität
|
|
11
|
+
✅ **Weltbefehle** - Lenny-spezifische Bewegungs- und Sensorbefehle
|
|
12
|
+
✅ **REPL Konsole** - Interaktive Konsolenanwendung
|
|
13
|
+
✅ **Browser-Version** - Web-basierte Benutzeroberfläche
|
|
14
|
+
|
|
15
|
+
## Installation und Verwendung
|
|
16
|
+
|
|
17
|
+
### Voraussetzungen
|
|
18
|
+
- Node.js 14+
|
|
19
|
+
- npm
|
|
20
|
+
|
|
21
|
+
### Build und Ausführung
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Installation der Dependencies
|
|
25
|
+
npm install
|
|
26
|
+
|
|
27
|
+
# TypeScript kompilieren
|
|
28
|
+
npm run build
|
|
29
|
+
|
|
30
|
+
# REPL starten
|
|
31
|
+
npm start:repl
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sprachelemente
|
|
35
|
+
|
|
36
|
+
### Kernbefehle (in allen unterstützten Sprachen)
|
|
37
|
+
|
|
38
|
+
| Befehl | Bedeutung |
|
|
39
|
+
|--------|-----------|
|
|
40
|
+
| **VAR** | Variablendefinition |
|
|
41
|
+
| **SETZE** (`<<`) | Wertzuweisung |
|
|
42
|
+
| **WENN/DANN/SONST/ENDE** | Bedingter Block |
|
|
43
|
+
| **SOLANGE/ENDE** | While-Schleife |
|
|
44
|
+
| **FÜR/IN/ENDE** | For-Schleife |
|
|
45
|
+
| **PROZEDUR/ENDE** | Funktionsdefinition |
|
|
46
|
+
| **SCHREIB** | Ausgabe auf Konsole |
|
|
47
|
+
| **REM** | Kommentar |
|
|
48
|
+
|
|
49
|
+
### Weltbefehle (Lenny-spezifisch)
|
|
50
|
+
|
|
51
|
+
| Befehl | Bedeutung | Rückgabe |
|
|
52
|
+
|--------|-----------|---------|
|
|
53
|
+
| **LAUF** | Lenny läuft nach vorne | nothing |
|
|
54
|
+
| **DREH_LINKS** | Laufdirection nach links drehen | nothing |
|
|
55
|
+
| **NIMM** | Knochen vom Feld aufnehmen | nothing |
|
|
56
|
+
| **GIB** | Knochen auf das Feld legen | nothing |
|
|
57
|
+
| **IST_FREI** | Prüfe ob Feld frei ist | true/false |
|
|
58
|
+
| **IST_KNOCHEN** | Prüfe ob Knochen vorhanden | true/false |
|
|
59
|
+
| **SPRING** | Über Hindernis springen | nothing |
|
|
60
|
+
| **SCHAU** | Feld in Laufrichtung betrachten | string |
|
|
61
|
+
|
|
62
|
+
### Operatoren
|
|
63
|
+
|
|
64
|
+
#### Arithmetisch
|
|
65
|
+
- `+` Addition
|
|
66
|
+
- `-` Subtraktion
|
|
67
|
+
- `*` Multiplikation
|
|
68
|
+
- `/` Division
|
|
69
|
+
- `%` Modulo
|
|
70
|
+
- `**` Potenzierung
|
|
71
|
+
|
|
72
|
+
#### Vergleich
|
|
73
|
+
- `<` Kleiner als
|
|
74
|
+
- `>` Größer als
|
|
75
|
+
- `<=` Kleiner gleich
|
|
76
|
+
- `>=` Größer gleich
|
|
77
|
+
- `==` Gleich
|
|
78
|
+
- `<>` Ungleich
|
|
79
|
+
|
|
80
|
+
#### Logisch
|
|
81
|
+
- `UND` und
|
|
82
|
+
- `ODER` oder
|
|
83
|
+
- `NICHT` nicht
|
|
84
|
+
|
|
85
|
+
#### Zuweisungen
|
|
86
|
+
- `<<` Wertzuweisung
|
|
87
|
+
- `+=` Addition und Zuweisung
|
|
88
|
+
- `-=` Subtraktion und Zuweisung
|
|
89
|
+
- `*=` Multiplikation und Zuweisung
|
|
90
|
+
- `/=` Division und Zuweisung
|
|
91
|
+
|
|
92
|
+
## Beispiele
|
|
93
|
+
|
|
94
|
+
### Variablen und mathematische Operationen
|
|
95
|
+
|
|
96
|
+
```lny
|
|
97
|
+
VAR x << 10
|
|
98
|
+
VAR y << 20
|
|
99
|
+
VAR ergebnis << x + y * 2
|
|
100
|
+
SCHREIB ergebnis
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Bedingter Block
|
|
104
|
+
|
|
105
|
+
```lny
|
|
106
|
+
VAR alter << 18
|
|
107
|
+
|
|
108
|
+
WENN alter >= 18 DANN
|
|
109
|
+
SCHREIB "Erwachsen"
|
|
110
|
+
SONST
|
|
111
|
+
SCHREIB "Minderjährig"
|
|
112
|
+
ENDE
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### While-Schleife
|
|
116
|
+
|
|
117
|
+
```lny
|
|
118
|
+
VAR zaehler << 0
|
|
119
|
+
|
|
120
|
+
SOLANGE zaehler < 5
|
|
121
|
+
SCHREIB zaehler
|
|
122
|
+
zaehler += 1
|
|
123
|
+
ENDE
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### For-Schleife
|
|
127
|
+
|
|
128
|
+
```lny
|
|
129
|
+
VAR liste << [10, 20, 30, 40, 50]
|
|
130
|
+
|
|
131
|
+
FÜR element IN liste
|
|
132
|
+
SCHREIB element
|
|
133
|
+
ENDE
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Prozedur (Funktion)
|
|
137
|
+
|
|
138
|
+
```lny
|
|
139
|
+
PROZEDUR quadrat(n)
|
|
140
|
+
VAR ergebnis << n * n
|
|
141
|
+
SCHREIB ergebnis
|
|
142
|
+
ENDE
|
|
143
|
+
|
|
144
|
+
quadrat(5)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Lenny Bewegung
|
|
148
|
+
|
|
149
|
+
```lny
|
|
150
|
+
REM Lenny läuft auf freiem Feld
|
|
151
|
+
WENN IST_FREI DANN
|
|
152
|
+
LAUF
|
|
153
|
+
SONST
|
|
154
|
+
DREH_LINKS
|
|
155
|
+
ENDE
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## REPL Befehle
|
|
159
|
+
|
|
160
|
+
In der interaktiven REPL:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
:exit - REPL beenden
|
|
164
|
+
:lang <xx> - Sprache ändern (en, de, fr, es, it)
|
|
165
|
+
:clear - Ausgabe löschen
|
|
166
|
+
:state - Lenny-Status anzeigen
|
|
167
|
+
:help - Hilfemeldung anzeigen
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Sprachunterstützung
|
|
171
|
+
|
|
172
|
+
Der Interpreter unterstützt die folgenden Sprachen:
|
|
173
|
+
|
|
174
|
+
- **Deutsch** (de) - Standard
|
|
175
|
+
- **English** (en)
|
|
176
|
+
- **Français** (fr)
|
|
177
|
+
- **Español** (es)
|
|
178
|
+
- **Italiano** (it)
|
|
179
|
+
|
|
180
|
+
Die Landessprache wird automatisch erkannt. Sie kann mit `:lang <xx>` angegeben werden.
|
|
181
|
+
|
|
182
|
+
## Architektur
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
src/
|
|
186
|
+
├── lexer/ - Tokenisierung und lexikalische Analyse
|
|
187
|
+
├── parser/ - Syntaxanalyse (AST-Generierung)
|
|
188
|
+
├── interpreter/ - AST-Interpretation und Ausführung
|
|
189
|
+
├── ast/ - AST-Knotendefinitionen
|
|
190
|
+
├── i18n/ - Mehrsprachige Unterstützung
|
|
191
|
+
├── world/ - Lenny-Welt und Weltbefehle
|
|
192
|
+
├── repl.ts - Interaktive Konsolenanwendung
|
|
193
|
+
└── index.ts - Public API
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## TypeScript Typsicherheit
|
|
197
|
+
|
|
198
|
+
Das Projekt nutzt strikte TypeScript-Konfiguration für Typsicherheit:
|
|
199
|
+
- `strict: true`
|
|
200
|
+
- `esModuleInterop: true`
|
|
201
|
+
- `forceConsistentCasingInFileNames: true`
|
|
202
|
+
|
|
203
|
+
## Erweiterungsmöglichkeiten
|
|
204
|
+
|
|
205
|
+
Das System ist modular aufgebaut und kann einfach erweitert werden:
|
|
206
|
+
|
|
207
|
+
1. **Neue Sprachen hinzufügen** - In `src/i18n/i18n.ts` neue Übersetzungen hinzufügen
|
|
208
|
+
2. **Neue Built-In Befehle** - In `src/world/world.ts` neue Methoden registrieren
|
|
209
|
+
3. **Neue Kernbefehle** - In `src/parser/parser.ts` neue Statement-Typen behandeln
|
|
210
|
+
4. **Neue Operatoren** - In `src/interpreter/interpreter.ts` neue Operatoren hinzufügen
|
|
211
|
+
|
|
212
|
+
## Testing
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npm test # (wird noch implementiert)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Browser-Version
|
|
219
|
+
|
|
220
|
+
Eine Web-basierte Version ist unter `index.html` verfügbar. Sie kann lokal mit einem HTTP-Server geöffnet werden:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
python -m http.server 8000
|
|
224
|
+
# oder
|
|
225
|
+
npx http-server
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Dann `http://localhost:8000` im Browser öffnen.
|
|
229
|
+
|
|
230
|
+
## Lizenz
|
|
231
|
+
|
|
232
|
+
MIT
|
|
233
|
+
|
|
234
|
+
## Autor
|
|
235
|
+
|
|
236
|
+
Erstellt für das Lny 1.0 Sprachprojekt
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
**Viel Spaß beim Programmieren mit Lny!** 🐕
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Lenny2
|
|
2
|
+
|
|
3
|
+
Letzte Aktualisierung: **11/03/2026**
|
|
4
|
+
|
|
5
|
+
Interpreter-Implementierung fuer **Lny 1.0** in TypeScript mit:
|
|
6
|
+
|
|
7
|
+
- Lexer + Parser + AST + Evaluator
|
|
8
|
+
- Mehrsprachigen Kernbefehlen (de, en, fr, es, it)
|
|
9
|
+
- Mehrsprachigen Weltbefehlen (LennyWorld)
|
|
10
|
+
- REPL fuer die Konsole
|
|
11
|
+
- Browser-UI (index.html)
|
|
12
|
+
|
|
13
|
+
## Schnellstart
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
npm run build
|
|
18
|
+
npm run test
|
|
19
|
+
npm run start:repl
|
|
20
|
+
# optional: direkt ein Skript starten
|
|
21
|
+
npm run start:repl -- examples/00-demo.lny
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Projektstruktur
|
|
25
|
+
|
|
26
|
+
- `src/lexer/lexer.ts`: Tokenizer mit sprachuebergreifender Keyword-Erkennung
|
|
27
|
+
- `src/parser/parser.ts`: Parser mit Operator-Prioritaet und Klammerausdruecken
|
|
28
|
+
- `src/interpreter/interpreter.ts`: AST-Interpreter inkl. Kontrollfluss
|
|
29
|
+
- `src/world/world.ts`: LennyWorld + Built-ins (`RUN`, `TURN_LEFT`, ...)
|
|
30
|
+
- `src/i18n/i18n.ts`: Uebersetzungen fuer Befehle und Meldungen
|
|
31
|
+
- `src/repl.ts`: Interaktive Konsolen-REPL
|
|
32
|
+
- `examples/*.lny`: Ausfuehrbare Lny-Skriptdateien (Beispiel: `examples/00-demo.lny`)
|
|
33
|
+
- `index.html`: Browser-Oberflaeche
|
|
34
|
+
|
|
35
|
+
## Spracheigenschaften
|
|
36
|
+
|
|
37
|
+
- Kernbefehle intern auf Englisch modelliert (Token/AST)
|
|
38
|
+
- Eingabe in einer der unterstuetzten Landessprachen
|
|
39
|
+
- Auswertung von verschachtelten Ausdruecken inkl. Klammern
|
|
40
|
+
- Unterstuetzung fuer:
|
|
41
|
+
- `IF/THEN/ELSE/END`
|
|
42
|
+
- `WHILE/END`
|
|
43
|
+
- `FOR/IN/END`
|
|
44
|
+
- `VAR`, `SET` (per `<<`)
|
|
45
|
+
- `LOG`, `PROC`, `REM`
|
|
46
|
+
- Arithmetik, Vergleich, Logik, Potenz, zusammengesetzte Zuweisungen
|
|
47
|
+
|
|
48
|
+
## Hinweise
|
|
49
|
+
|
|
50
|
+
- Die REPL unterstuetzt zusaetzlich:
|
|
51
|
+
- `:lang <de|en|fr|es|it>`
|
|
52
|
+
- `:state`
|
|
53
|
+
- `:clear`
|
|
54
|
+
- `:run <pfad/zum/skript.lny>`
|
|
55
|
+
- `:help`
|
|
56
|
+
- `:exit`
|
|
57
|
+
|
|
58
|
+
- Konfiguration ueber `lny-config.yml`:
|
|
59
|
+
- `language: de`
|
|
60
|
+
- `field_size: 10x10` (Default)
|
|
61
|
+
|
|
62
|
+
- `.lny`-Skripte ausfuehren:
|
|
63
|
+
- Beim Start: `npm run start:repl -- examples/00-demo.lny`
|
|
64
|
+
- In der REPL: `:run examples/00-demo.lny`
|
|
65
|
+
|
|
66
|
+
- Eine ausfuehrliche Dokumentation liegt in `INTERPRETER.md`.
|
|
67
|
+
|
|
68
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Lokalisierte Help-Dateien
|
|
2
|
+
|
|
3
|
+
Die Browser-Hilfe laedt pro Sprache zuerst diese Dateien:
|
|
4
|
+
|
|
5
|
+
- `docs/i18n/en/lny-referenz.md`
|
|
6
|
+
- `docs/i18n/en/INTERPRETER.md`
|
|
7
|
+
- `docs/i18n/fr/lny-referenz.md`
|
|
8
|
+
- `docs/i18n/fr/INTERPRETER.md`
|
|
9
|
+
- `docs/i18n/es/lny-referenz.md`
|
|
10
|
+
- `docs/i18n/es/INTERPRETER.md`
|
|
11
|
+
- `docs/i18n/it/lny-referenz.md`
|
|
12
|
+
- `docs/i18n/it/INTERPRETER.md`
|
|
13
|
+
|
|
14
|
+
Wenn eine lokalisierte Datei fehlt, faellt die Hilfe automatisch auf die Standarddatei in `docs/` zurueck.
|
|
15
|
+
|
|
16
|
+
Empfohlener Start:
|
|
17
|
+
|
|
18
|
+
1. Kopiere `docs/lny-referenz.md` und `docs/INTERPRETER.md` in den gewuenschten Sprachordner.
|
|
19
|
+
2. Uebersetze die Texte dort.
|
|
20
|
+
3. Lade die Browser-Seite neu und oeffne die Hilfe in der gewuenschten Sprache.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Lny 1.0 Befehlsreferenz
|
|
2
|
+
|
|
3
|
+
Letzte Aktualisierung: **25/02/2026**
|
|
4
|
+
|
|
5
|
+
# Der Befehlssatz von Lny 1.0
|
|
6
|
+
|
|
7
|
+
## Quick Reference - Alle Befehle
|
|
8
|
+
|
|
9
|
+
### Kernbefehle
|
|
10
|
+
- **IF** – Leitet einen IF-ELSE-Befehl ein (es folgt immer eine Bedingung)
|
|
11
|
+
- **THEN** – Leitet den Bedingungszweig ein
|
|
12
|
+
- **ELSE** – Leitet den Alternativzweig ein
|
|
13
|
+
- **END** – Beendet IF, THEN, WHILE, FOR und PROC
|
|
14
|
+
- **WHILE** – Leitet eine Solange-Wiederholung ein (es folgt immer eine Bedingung)
|
|
15
|
+
- **FOR** – Leitet eine FOR-Wiederholung ein (es folgt immer eine Variable)
|
|
16
|
+
- **IN** – Gibt an, was bei FOR durchlaufen werden soll (es folgt immer eine Liste)
|
|
17
|
+
- **VAR** – Definiert eine Variable (es gibt keine Datentypen)
|
|
18
|
+
- **SET** – Weist einer Variablen einen Wert per `<<` zu
|
|
19
|
+
- **LIST** – Definiert eine Liste (Werte stehen immer in eckigen Klammern)
|
|
20
|
+
- **LOG** – Gibt eine Meldung in der Konsole aus
|
|
21
|
+
- **PROC** – Leitet eine Prozedur ein (es folgt immer ein Name)
|
|
22
|
+
- **REM** – Leitet eine Kommentarzeile ein
|
|
23
|
+
|
|
24
|
+
### Weltbefehle (built-ins)
|
|
25
|
+
- **RUN** – Lenny läuft in der Laufrichtung nach vorn
|
|
26
|
+
- **TURN_LEFT** – Die Laufrichtung von Lenny dreht sich nach links
|
|
27
|
+
- **TAKE** – Lenny nimmt einen Knochen vom Feld auf
|
|
28
|
+
- **GIVE** – Lenny legt einen Knochen aus der Knochenbox auf das Feld
|
|
29
|
+
- **FREE_AHEAD** – Prüft, ob das Feld in der Laufrichtung frei ist (gibt TRUE/FALSE zurück)
|
|
30
|
+
- **THING_THERE** – Prüft, ob sich auf dem Feld in der Laufrichtung ein Knochen befindet (gibt TRUE/FALSE zurück)
|
|
31
|
+
- **JUMP** – Lenny springt über einen Baumstamm
|
|
32
|
+
- **LOOK** – Lenny schaut auf das Feld in der Laufrichtung
|
|
33
|
+
- **HOLE_POSITION** (EN: GET_POSITION, FR: OBTIENS_POSITION, ES: OBTEN_POSITION, IT: OTTIENI_POSIZIONE) – Gibt die aktuelle Position von Lenny als String x:y zurück
|
|
34
|
+
- **PRIVATE** – Gibt den Wert eines privaten Attributs zurück
|
|
35
|
+
- **GLOBAL** – Gibt den Wert eines globalen Attributs zurück
|
|
36
|
+
- **ZUFALL [max] [min]** – Erzeugt eine Zufallszahl. Ohne Argumente: Zahl zwischen 0 und 1 (float). Mit einem Argument: Ganzzahl zwischen 0 und max (inklusive, auch negativ). Mit zwei Argumenten: Ganzzahl zwischen min und max (inklusive, auch negativ). Synonyme: RANDOM, ALEATOIRE, ALEATORIO, CASUALE|*NUMBER*|
|
|
37
|
+
|
|
38
|
+
### Operatoren
|
|
39
|
+
- **<<** – Wertzuweisung
|
|
40
|
+
- **<, >, <=, >=** – Kleiner, größer, Kleiner-Gleich, Größer-Gleich
|
|
41
|
+
- **==** – Gleich
|
|
42
|
+
- **<>** – Ungleich
|
|
43
|
+
- **+, -, /, *** – Grundrechenarten
|
|
44
|
+
- **%** – Modulo
|
|
45
|
+
- `**` – Potenz
|
|
46
|
+
- **NICHT** – Umkehrung (Unär)
|
|
47
|
+
- **UND** – Und-Verknüpfung
|
|
48
|
+
- **ODER** – Oder-Verknüpfung
|
|
49
|
+
- **+=** – Inkrement
|
|
50
|
+
- **-=** – Dekrement
|
|
51
|
+
- ***=** – Multipliation und Zuweisung
|
|
52
|
+
- **/=** – Division und Zuweisung
|
|
53
|
+
|
|
54
|
+
### Private Attribute von Lenny
|
|
55
|
+
- **name** – Der Name des Hundes (aktuell immer "Lenny")
|
|
56
|
+
- **birthday** – Der Geburtstag des Hundes
|
|
57
|
+
- **hungry** – Wie hungrig ist der Hund
|
|
58
|
+
- **thirsty** – Wie durstig ist der Hund
|
|
59
|
+
- **howManyRun** – Wie oft ist der Hund bereits gelaufen
|
|
60
|
+
- **howManyTurn** – Wie oft hat sich der Hund bereits gedreht
|
|
61
|
+
- **howManyJump** – Wie oft ist der Hund bereits gesprungen
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### Weltbefehle (built-ins) - Detailliert
|
|
66
|
+
|
|
67
|
+
Weltbefehle (built-ins) sind Befehle, die mit einer bestimmten "Welt" geladen werden. Eine Welt stellt eine Umgebung zur Verfügung, auf die die Kernbefehle angewendet werden.
|
|
68
|
+
|
|
69
|
+
Am Anfang gibt es nur eine Welt, die "LennyWorld". Sie besteht aus einem Terrain, auf dem Lenny laufen, über Hindernisse springen und Knochen einsammeln und ablegen kann.
|
|
70
|
+
|
|
71
|
+
Die Menge der Weltbefehle wird absichtlich klein gehalten. In der "LennyWorld" gibt es z.B. nur einen `TURN_LEFT`-Befehl und kein *TURN_RIGHT*-Pendant. Auch wenn dadurch die Programmierung etwas umständlicher wird, soll damit das algorithmische Denkvermögen trainiert werden.
|
|
72
|
+
|
|
73
|
+
Zu einer Welt gehören auch globale Variablen.
|
|
74
|
+
|
|
75
|
+
|Built-In|Bedeutung|Rückgabe|
|
|
76
|
+
|------|---------|--------|
|
|
77
|
+
|RUN|Lenny läuft in der Laufrichtung nach vorn|*NOTHING*|
|
|
78
|
+
|TURN_LEFT|Die Laufrichtung von Lenny dreht sich nach links|*NOTHING*|
|
|
79
|
+
|TAKE|Lenny nimmt einen Knochen vom Feld auf|*NOTHING*|
|
|
80
|
+
|GIVE|Lenny legt einen Knochen aus der Knochenbox auf das Feld|*NOTHING*|
|
|
81
|
+
|FREE_AHEAD|Prüft,ob das Feld in der Laufrichtung frei ist|*TRUE*/*FALSE*|
|
|
82
|
+
|THING_THERE|Prüft, ob sich auf dem Feld in der Laufrichtung ein Knochen befindet|*TRUE*/*FALSE*|
|
|
83
|
+
|JUMP|Lenny springt über einen Baumstamm (bzw. allgemein ein Hinderniss), das sich auf dem Feld vor ihm in der Laufrichtung befindet|*NOTHING*|
|
|
84
|
+
|LOOK|Lenny schaut auf das Feld, das sich vor ihm in der Laufrichtung befindet|Gegenstand als enum|*NOTHING*|
|
|
85
|
+
|HOLE_POSITION<br>EN: GET_POSITION<br>FR: OBTIENS_POSITION<br>ES: OBTEN_POSITION<br>IT: OTTIENI_POSIZIONE|Gibt die aktuelle Position von Lenny als String im Format x:y zurück (z.B. 0:0 für Start)|*STRING*|
|
|
86
|
+
|PRIVATE <name>|Gibt den Wert eines privaten Attributs zurück|Variabel|
|
|
87
|
+
|GLOBAL <name>|Gibt den Wert eines globalen Attributs zurück|Variabel|
|
|
88
|
+
|
|
89
|
+
*TRUE*, *FALSE* und *NOTHING* sind Konstanten.
|
|
90
|
+
|
|
91
|
+
### Globale Attribute
|
|
92
|
+
|
|
93
|
+
Damit alles so einfach wie möglich bleibt, gibt es kein globales Objekt mit mehreren Attributen. Statt dessen gibt es mehrere globale Attribute, die über das Built-In *GLOBAL* angesprochen werden.
|
|
94
|
+
|
|
95
|
+
Ein Beispiel ist *Territory*. Es steht für eine Liste, deren Elemente entweder über ein *(x,y)*-Tupel oder über die interne Bezeichnung, z.B. "A1", angesprochen werden.3
|
|
96
|
+
|
|
97
|
+
Jedes Element ist vom Typ *Field*. Es enthält eine Liste aller Gegenstände, z.B. Doghut, Log, Bones, die über die privaten Attribute dieses Elements angesprochen werden (die genaue Syntax steht noch nicht fest).
|
|
98
|
+
|
|
99
|
+
|Attribut|Bedeutung|Typ|
|
|
100
|
+
|--------|---------|---|
|
|
101
|
+
|Doghut|*TRUE*, wenn sich auf dem Feld eine Hundehuette befindet|*NUMBER*|
|
|
102
|
+
|Log|*TRUE*, wenn sich auf dem Feld ein Baumstamm befindet|*NUMBER*|
|
|
103
|
+
|Bones|Anzahl Knochen auf dem Feld|*LOGIC*|
|
|
104
|
+
|
|
105
|
+
### Kernbefehle
|
|
106
|
+
|
|
107
|
+
Die Kernbefehle steuern den Programmablauf und sind unabhängig von den Built-Ins einer bestimmten World.
|
|
108
|
+
|
|
109
|
+
|Befehl|Bedeutung|Kommentar|
|
|
110
|
+
|------|---------|--------------|
|
|
111
|
+
|IF |Leitet einen IF-ELSE-Befehl ein|Es folgt immer Bedingung|
|
|
112
|
+
|THEN |Leitet den Bedigungszweig ein| |
|
|
113
|
+
|ELSE |Leitet den Alternativzweig ein| |
|
|
114
|
+
|END |Beendet IF, THEN, WHILE, FOR und PROC| |
|
|
115
|
+
|WHILE|Leitet eine Solange-Wiederholung ein|Es folgt immer eine Bedingung|
|
|
116
|
+
|FOR|Leitet eine FOR-Wiederholung ein|Es folgt immer eine Variable|
|
|
117
|
+
|IN|Gibt an, was bei FOR durchlaufen werden soll|Es folgt immer eine Liste|
|
|
118
|
+
|VAR|Definiert eine Variable|Es gibt keine Datentypen|
|
|
119
|
+
|SET|Weist einer Variablen einen Wert per << zu|Es gibt keine Datentypen|
|
|
120
|
+
|LIST|Definiert eine Liste|Die Werte stehen immer in eckigen Klammern|
|
|
121
|
+
|LOG|Gibt eine Meldung in der Konsole aus|
|
|
122
|
+
|PROC|Leitet eine Prozedur ein|Es folgt immer ein Name|
|
|
123
|
+
|REM|Leitet eine Kommentarzeile ein|Es gibt nur Kommentarzeilen|
|
|
124
|
+
|
|
125
|
+
### Operatoren
|
|
126
|
+
|
|
127
|
+
|Operator|Bedeutung|
|
|
128
|
+
|--------|---------|
|
|
129
|
+
|<< |Wertzuweisung|
|
|
130
|
+
|<,> |Kleiner, größer|
|
|
131
|
+
|<=,>= |Kleiner-Gleich, Größer-Gleich|
|
|
132
|
+
|== |Gleich |
|
|
133
|
+
|<> |Ungleich |
|
|
134
|
+
|+,-,/,* |Grundrechenarten|
|
|
135
|
+
|% |Modulo|
|
|
136
|
+
|** |Potenz|
|
|
137
|
+
|NOT |Umkehrung (Unär)|
|
|
138
|
+
|UND |Und-Verknüpfung|
|
|
139
|
+
|ODER |Oder-Verknüpfung|
|
|
140
|
+
|+= |Inkrement|
|
|
141
|
+
|-= |Dekrement|
|
|
142
|
+
|*= |Multipliation und Zuweisung|
|
|
143
|
+
|/= |Division und Zuweisung|
|
|
144
|
+
|
|
145
|
+
### Private Attribute
|
|
146
|
+
|
|
147
|
+
*Lenny* ist ein globales Objekt.
|
|
148
|
+
|
|
149
|
+
*Lenny* besitzt eine Reihe privater Attribute, die über das Built-Ins *PRIVATE* angesprochen werden.
|
|
150
|
+
|
|
151
|
+
|Attribut|Bedeutung|Typ|
|
|
152
|
+
|--------|---------|---|
|
|
153
|
+
|name|Der Name des Hundes, aktuell immer "Lenny"|STRING|
|
|
154
|
+
|birthday|Der Geburtstag des Hundes, aktuell aktuelles Datum - 1 Jahr|DATE|
|
|
155
|
+
|hungry|Wie hunrig ist der Hund|NUMBER|
|
|
156
|
+
|thirsty|Wie durstig ist der Hund|NUMBER|
|
|
157
|
+
|howManyRun|Wie oft ist der Hund bereits gelaufen|NUMBER|
|
|
158
|
+
|howManyTurn|Wie oft hat sich der Hund bereits gedreht|NUMBER|
|
|
159
|
+
|howManyJump|Wie oft ist der Hund bereits gesprungen|NUMBER|
|
|
160
|
+
|
|
161
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Lny 1.0 im Überblick
|
|
2
|
+
|
|
3
|
+
_ _____ _ _ _ _ _ __ ___
|
|
4
|
+
| | | ____| \ | | \ | | \ / / / _ \
|
|
5
|
+
| | | _| | \| | \| | V / | | | |
|
|
6
|
+
| |___| |___| |\ | |\ | /| \ | |_| |
|
|
7
|
+
|_____|_____|_| \_|_| \_|/__| \_|\___/
|
|
8
|
+
|
|
9
|
+
**Lny** ist eine einfache Interpreter-Sprache, die aus einer Reihe von Kernbefehlen besteht:
|
|
10
|
+
|
|
11
|
+
- **IF** – Leitet einen IF-ELSE-Befehl ein (es folgt immer eine Bedingung)
|
|
12
|
+
- **THEN** – Leitet den Bedingungszweig ein
|
|
13
|
+
- **ELSE** – Leitet den Alternativzweig ein
|
|
14
|
+
- **END** – Beendet IF, THEN, WHILE, FOR und PROC
|
|
15
|
+
- **WHILE** – Leitet eine Solange-Wiederholung ein (es folgt immer eine Bedingung)
|
|
16
|
+
- **FOR** – Leitet eine FOR-Wiederholung ein (es folgt immer eine Variable)
|
|
17
|
+
- **IN** – Gibt an, was bei FOR durchlaufen werden soll (es folgt immer eine Liste)
|
|
18
|
+
- **VAR** – Definiert eine Variable (es gibt keine Datentypen)
|
|
19
|
+
- **SET** – Weist einer Variablen einen Wert per `<<` zu
|
|
20
|
+
- **LIST** – Definiert eine Liste (Werte stehen immer in eckigen Klammern)
|
|
21
|
+
- **LOG** – Gibt eine Meldung in der Konsole aus
|
|
22
|
+
- **PROC** – Leitet eine Prozedur ein (es folgt immer ein Name)
|
|
23
|
+
- **REM** – Leitet eine Kommentarzeile ein
|
|
24
|
+
|
|
25
|
+
Offiziell gibt es bei *Lny* keine Datentypen, intern gibt es
|
|
26
|
+
|
|
27
|
+
- *NUMBER* any Integer number
|
|
28
|
+
- *DATE* a date time
|
|
29
|
+
- *STRING* a string with a length of 65356 to keep everything simple
|
|
30
|
+
- *LOGIC* either *TRUE* or *FALSE*
|
|
31
|
+
|
|
32
|
+
Um *Lny* so einfach wie möglich zu halten, gibt es in der Version 1.0 keine Klassen.
|
|
33
|
+
|
package/favicon.ico
ADDED
|
Binary file
|