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.

Files changed (130) hide show
  1. package/.vscode/launch.json +19 -0
  2. package/README.md +96 -0
  3. package/book_ALT/LennySmartIcon1.png +0 -0
  4. package/book_ALT/chapter01.md +141 -0
  5. package/book_ALT/chapter02.md +48 -0
  6. package/book_ALT/chapter03.md +28 -0
  7. package/book_ALT/chapter04.md +19 -0
  8. package/book_ALT/chapter05.md +21 -0
  9. package/book_ALT/chapter06.md +167 -0
  10. package/book_ALT/chapter07.md +232 -0
  11. package/book_ALT/chapter08.md +200 -0
  12. package/book_ALT/chapter09.md +175 -0
  13. package/book_ALT/chapter10.md +196 -0
  14. package/book_ALT/deckblatt.md +60 -0
  15. package/book_ALT/images/Lenny01.png +0 -0
  16. package/book_ALT/images/Lenny02.png +0 -0
  17. package/book_ALT/images/Lenny03.png +0 -0
  18. package/book_ALT/images/Lenny04.png +0 -0
  19. package/book_ALT/images/Lenny05.png +0 -0
  20. package/book_ALT/images/Lenny06.png +0 -0
  21. package/book_ALT/images/Lenny07.png +0 -0
  22. package/book_ALT/images/Lenny08.png +0 -0
  23. package/book_ALT/images/Lenny09.png +0 -0
  24. package/book_ALT/images/Lenny10.png +0 -0
  25. package/book_ALT/images/Lenny11.png +0 -0
  26. package/book_ALT/images/Lenny12.png +0 -0
  27. package/book_ALT/images/Lenny13.png +0 -0
  28. package/book_ALT/images/Lenny14.png +0 -0
  29. package/book_ALT/images/Lenny15.png +0 -0
  30. package/book_ALT/lehrerheft.md +255 -0
  31. package/dist/ast/ast.d.ts +126 -0
  32. package/dist/ast/ast.d.ts.map +1 -0
  33. package/dist/ast/ast.js +3 -0
  34. package/dist/ast/ast.js.map +1 -0
  35. package/dist/browser.d.ts +2 -0
  36. package/dist/browser.d.ts.map +1 -0
  37. package/dist/browser.js +1067 -0
  38. package/dist/browser.js.map +1 -0
  39. package/dist/examples.d.ts +11 -0
  40. package/dist/examples.d.ts.map +1 -0
  41. package/dist/examples.js +65 -0
  42. package/dist/examples.js.map +1 -0
  43. package/dist/i18n/i18n.d.ts +18 -0
  44. package/dist/i18n/i18n.d.ts.map +1 -0
  45. package/dist/i18n/i18n.js +505 -0
  46. package/dist/i18n/i18n.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +31 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interpreter/interpreter.d.ts +40 -0
  52. package/dist/interpreter/interpreter.d.ts.map +1 -0
  53. package/dist/interpreter/interpreter.js +415 -0
  54. package/dist/interpreter/interpreter.js.map +1 -0
  55. package/dist/lexer/lexer.d.ts +87 -0
  56. package/dist/lexer/lexer.d.ts.map +1 -0
  57. package/dist/lexer/lexer.js +425 -0
  58. package/dist/lexer/lexer.js.map +1 -0
  59. package/dist/lny-config.yml +6 -0
  60. package/dist/parser/parser.d.ts +50 -0
  61. package/dist/parser/parser.d.ts.map +1 -0
  62. package/dist/parser/parser.js +605 -0
  63. package/dist/parser/parser.js.map +1 -0
  64. package/dist/repl.d.ts +3 -0
  65. package/dist/repl.d.ts.map +1 -0
  66. package/dist/repl.js +472 -0
  67. package/dist/repl.js.map +1 -0
  68. package/dist/run-file.d.ts +2 -0
  69. package/dist/run-file.d.ts.map +1 -0
  70. package/dist/run-file.js +140 -0
  71. package/dist/run-file.js.map +1 -0
  72. package/dist/test.d.ts +2 -0
  73. package/dist/test.d.ts.map +1 -0
  74. package/dist/test.js +72 -0
  75. package/dist/test.js.map +1 -0
  76. package/dist/world/world.d.ts +103 -0
  77. package/dist/world/world.d.ts.map +1 -0
  78. package/dist/world/world.js +416 -0
  79. package/dist/world/world.js.map +1 -0
  80. package/docs/About.md +19 -0
  81. package/docs/INTERPRETER.md +240 -0
  82. package/docs/README.md +68 -0
  83. package/docs/i18n/README.md +20 -0
  84. package/docs/lny-referenz.md +161 -0
  85. package/docs/lny_ueberblick.md +33 -0
  86. package/examples/00-demo.lny +3 -0
  87. package/examples/01-variable-assignment.lny +4 -0
  88. package/examples/02-conditional.lny +7 -0
  89. package/examples/03-while-loop.lny +6 -0
  90. package/examples/04-for-loop.lny +5 -0
  91. package/examples/05-lenny-movement.lny +10 -0
  92. package/examples/06-procedure.lny +6 -0
  93. package/examples/fuer-range-1.lny +4 -0
  94. package/examples/fuer-range-2.lny +6 -0
  95. package/examples/fuer-range-3.lny +6 -0
  96. package/examples/fuer-range-4.lny +4 -0
  97. package/examples/fuer-range-5.lny +6 -0
  98. package/examples/solange-verschachtelt.lny +12 -0
  99. package/favicon.ico +0 -0
  100. package/index.html +108 -0
  101. package/jest.config.js +7 -0
  102. package/lny-config.yml +6 -0
  103. package/package.json +37 -0
  104. package/settings.json +4 -0
  105. package/src/ast/ast.ts +182 -0
  106. package/src/browser.ts +1274 -0
  107. package/src/examples.ts +68 -0
  108. package/src/i18n/i18n.ts +537 -0
  109. package/src/index.ts +6 -0
  110. package/src/interpreter/interpreter.ts +453 -0
  111. package/src/lexer/lexer.ts +493 -0
  112. package/src/parser/parser.ts +711 -0
  113. package/src/repl.ts +496 -0
  114. package/src/test.ts +71 -0
  115. package/src/world/world.ts +512 -0
  116. package/style.css +315 -0
  117. package/test1.lny +2 -0
  118. package/tests/interpreter.test.ts +42 -0
  119. package/tests/parser.test.ts +18 -0
  120. package/tsconfig.json +19 -0
  121. package/vercel.json +7 -0
  122. package/vscode-lny/.vscode/launch.json +13 -0
  123. package/vscode-lny/.vscodeignore +3 -0
  124. package/vscode-lny/README.md +83 -0
  125. package/vscode-lny/language-configuration.json +19 -0
  126. package/vscode-lny/license.txt +21 -0
  127. package/vscode-lny/lny-language-0.1.0.vsix +0 -0
  128. package/vscode-lny/package.json +41 -0
  129. package/vscode-lny/snippets/lny.json +136 -0
  130. 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
+
@@ -0,0 +1,3 @@
1
+ VAR x << 2
2
+ SETZE x << x + 5
3
+ SCHREIB x
@@ -0,0 +1,4 @@
1
+ VAR a << 5
2
+ VAR b << 10
3
+ VAR sum << a + b
4
+ SCHREIB sum
@@ -0,0 +1,7 @@
1
+ VAR age << 25
2
+
3
+ IF age >= 18 THEN
4
+ SCHREIB "Erwachsen"
5
+ ELSE
6
+ SCHREIB "Minderjaehrig"
7
+ END
@@ -0,0 +1,6 @@
1
+ VAR count << 0
2
+
3
+ WHILE count < 5
4
+ SCHREIB count
5
+ count += 1
6
+ END
@@ -0,0 +1,5 @@
1
+ VAR listx << [1, 2, 3, 4, 5]
2
+
3
+ FOR item IN listx
4
+ SCHREIB item
5
+ END
@@ -0,0 +1,10 @@
1
+ IF FREE_AHEAD THEN
2
+ RUN
3
+ RUN
4
+ SCHREIB HOLE_POSITION
5
+ SCHREIB "Ich gehe vorwaerts.."
6
+ ELSE
7
+ TURN_LEFT
8
+ SCHREIB "Ich drehe nach links.."
9
+ SCHREIB HOLE_POSITION
10
+ END
@@ -0,0 +1,6 @@
1
+ PROZEDUR greet(name)
2
+ SCHREIB "Hallo, "
3
+ SCHREIB name
4
+ END
5
+
6
+ greet("Alice")
@@ -0,0 +1,4 @@
1
+ # Beispiel: Zahlen von 1 bis 5 ausgeben
2
+ FUER i IN [1..5]
3
+ SCHREIBE i
4
+ ENDE
@@ -0,0 +1,6 @@
1
+ # Beispiel: Alle geraden Zahlen von 2 bis 10
2
+ FUER n IN [2..10]
3
+ WENN n % 2 = 0
4
+ SCHREIBE n
5
+ ENDE
6
+ ENDE
@@ -0,0 +1,6 @@
1
+ # Beispiel: Summe der Zahlen von 1 bis 10 berechnen
2
+ summe = 0
3
+ FUER x IN [1..10]
4
+ summe = summe + x
5
+ ENDE
6
+ SCHREIBE summe
@@ -0,0 +1,4 @@
1
+ # Beispiel: Rückwärts von 10 bis 1 zählen
2
+ FUER z IN [10..1]
3
+ SCHREIBE z
4
+ ENDE
@@ -0,0 +1,6 @@
1
+ # Beispiel: Mit Variablen als Grenzen
2
+ start = 3
3
+ ende = 7
4
+ FUER k IN [start..ende]
5
+ SCHREIBE k
6
+ ENDE
@@ -0,0 +1,12 @@
1
+ KOM Beispiel für ein verschachaltetes SOLANGE
2
+ VAR i
3
+ VAR j
4
+ SETZE i AUF 1
5
+ SOLANGE i <= 3
6
+ SETZE j AUF 1
7
+ SOLANGE j <= 2
8
+ SCHREIB "i = " + i + ", j = " + j
9
+ SETZE j AUF j + 1
10
+ ENDE
11
+ SETZE i AUF i + 1
12
+ ENDE
package/favicon.ico ADDED
Binary file