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.
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,415 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Interpreter = exports.BreakException = exports.ReturnValue = void 0;
4
+ const world_1 = require("../world/world");
5
+ const i18n_1 = require("../i18n/i18n");
6
+ class ReturnValue extends Error {
7
+ constructor(value) {
8
+ super();
9
+ this.value = value;
10
+ }
11
+ }
12
+ exports.ReturnValue = ReturnValue;
13
+ class BreakException extends Error {
14
+ constructor() {
15
+ super();
16
+ }
17
+ }
18
+ exports.BreakException = BreakException;
19
+ class Interpreter {
20
+ constructor(language = 'de', options = {}) {
21
+ this.output = [];
22
+ this.i18n = new i18n_1.I18n(language);
23
+ this.world = new world_1.World(language, options.worldWidth, options.worldHeight);
24
+ this.globalEnv = this.world.getEnvironment();
25
+ this.currentEnv = this.globalEnv;
26
+ }
27
+ setLanguage(language) {
28
+ this.i18n.setLanguage(language);
29
+ this.world.setLanguage(language);
30
+ }
31
+ interpret(program) {
32
+ try {
33
+ // Top-Level: KEIN neues Environment erzeugen, sondern globalEnv verwenden
34
+ for (const statement of program.body) {
35
+ this.executeStatement(statement);
36
+ }
37
+ return null;
38
+ }
39
+ catch (e) {
40
+ if (e instanceof ReturnValue) {
41
+ return e.value;
42
+ }
43
+ throw e;
44
+ }
45
+ }
46
+ executeBlock(statements, env) {
47
+ const previousEnv = this.currentEnv;
48
+ this.currentEnv = env;
49
+ try {
50
+ for (const statement of statements) {
51
+ this.executeStatement(statement);
52
+ }
53
+ }
54
+ finally {
55
+ this.currentEnv = previousEnv;
56
+ }
57
+ }
58
+ executeStatement(stmt) {
59
+ switch (stmt.type) {
60
+ case 'ExpressionStatement':
61
+ this.evaluate(stmt.expression);
62
+ break;
63
+ case 'VariableDeclaration': {
64
+ const varDecl = stmt;
65
+ const value = varDecl.initialValue ? this.evaluate(varDecl.initialValue) : null;
66
+ this.currentEnv.define(varDecl.name, value);
67
+ break;
68
+ }
69
+ case 'VariableAssignment': {
70
+ const assignment = stmt;
71
+ const currentValue = this.currentEnv.get(assignment.name);
72
+ let newValue;
73
+ if (assignment.operator === '<<') {
74
+ newValue = this.evaluate(assignment.value);
75
+ }
76
+ else if (assignment.operator === 'AUF') {
77
+ newValue = this.evaluate(assignment.value);
78
+ }
79
+ else {
80
+ const rightValue = this.evaluate(assignment.value);
81
+ newValue = this.applyCompoundOperator(assignment.operator, currentValue, rightValue);
82
+ }
83
+ this.currentEnv.set(assignment.name, newValue);
84
+ break;
85
+ }
86
+ case 'IfStatement':
87
+ this.executeIfStatement(stmt);
88
+ break;
89
+ case 'WhileStatement':
90
+ this.executeWhileStatement(stmt);
91
+ break;
92
+ case 'ForStatement':
93
+ this.executeForStatement(stmt);
94
+ break;
95
+ case 'ProcedureDeclaration': {
96
+ const procDecl = stmt;
97
+ const procedure = {
98
+ parameters: procDecl.parameters,
99
+ body: procDecl.body,
100
+ closure: this.currentEnv,
101
+ };
102
+ this.currentEnv.define(procDecl.name, procedure);
103
+ break;
104
+ }
105
+ case 'ReturnStatement': {
106
+ const returnStmt = stmt;
107
+ const value = returnStmt.argument ? this.evaluate(returnStmt.argument) : null;
108
+ throw new ReturnValue(value);
109
+ }
110
+ case 'LogStatement': {
111
+ const logStmt = stmt;
112
+ const value = this.evaluate(logStmt.expression);
113
+ this.output.push(this.lnyValueToString(value));
114
+ break;
115
+ }
116
+ case 'CommentStatement':
117
+ // Comments are ignored
118
+ break;
119
+ case 'Block':
120
+ this.executeBlock(stmt.statements, new world_1.LnyEnvironment(this.currentEnv));
121
+ break;
122
+ }
123
+ }
124
+ executeIfStatement(stmt) {
125
+ const condition = this.isTruthy(this.evaluate(stmt.condition));
126
+ if (condition) {
127
+ this.executeBlock(stmt.consequent, new world_1.LnyEnvironment(this.currentEnv));
128
+ }
129
+ else if (stmt.alternate) {
130
+ this.executeBlock(stmt.alternate, new world_1.LnyEnvironment(this.currentEnv));
131
+ }
132
+ }
133
+ executeWhileStatement(stmt) {
134
+ while (this.isTruthy(this.evaluate(stmt.condition))) {
135
+ try {
136
+ this.executeBlock(stmt.body, new world_1.LnyEnvironment(this.currentEnv));
137
+ }
138
+ catch (e) {
139
+ if (e instanceof BreakException) {
140
+ break;
141
+ }
142
+ throw e;
143
+ }
144
+ }
145
+ }
146
+ executeForStatement(stmt) {
147
+ const iterable = this.evaluate(stmt.iterable);
148
+ const env = new world_1.LnyEnvironment(this.currentEnv);
149
+ if (!Array.isArray(iterable)) {
150
+ throw new Error(this.i18n.t('error_for_iterable_must_list'));
151
+ }
152
+ for (const item of iterable) {
153
+ env.define(stmt.variable, item);
154
+ try {
155
+ this.executeBlock(stmt.body, env);
156
+ }
157
+ catch (e) {
158
+ if (e instanceof BreakException) {
159
+ break;
160
+ }
161
+ throw e;
162
+ }
163
+ }
164
+ }
165
+ evaluate(expr) {
166
+ switch (expr.type) {
167
+ case 'RangeLiteral': {
168
+ const rangeExpr = expr;
169
+ const start = this.evaluate(rangeExpr.start);
170
+ const end = this.evaluate(rangeExpr.end);
171
+ if (typeof start !== 'number' || typeof end !== 'number') {
172
+ throw new Error(this.i18n.t('error_type_mismatch'));
173
+ }
174
+ const result = [];
175
+ if (start <= end) {
176
+ for (let i = start; i <= end; i++)
177
+ result.push(i);
178
+ }
179
+ else {
180
+ for (let i = start; i >= end; i--)
181
+ result.push(i);
182
+ }
183
+ return result;
184
+ }
185
+ case 'NumberLiteral':
186
+ return expr.value;
187
+ case 'StringLiteral':
188
+ return expr.value;
189
+ case 'BooleanLiteral':
190
+ return expr.value;
191
+ case 'NothingLiteral':
192
+ return null;
193
+ case 'ListLiteral': {
194
+ const listExpr = expr;
195
+ return listExpr.elements.map((el) => this.evaluate(el));
196
+ }
197
+ case 'Identifier': {
198
+ const idExpr = expr;
199
+ // 1. Variable?
200
+ if (this.currentEnv.has(idExpr.name)) {
201
+ const value = this.currentEnv.get(idExpr.name);
202
+ // 2. Prozedur? Dann direkt ausführen (ohne Argumente)
203
+ if (value && typeof value === 'object' && 'parameters' in value && 'body' in value) {
204
+ const procedure = value;
205
+ if (procedure.parameters.length === 0) {
206
+ // Keine Argumente nötig
207
+ const procEnv = new world_1.LnyEnvironment(procedure.closure);
208
+ try {
209
+ this.executeBlock(procedure.body, procEnv);
210
+ return null;
211
+ }
212
+ catch (e) {
213
+ if (e instanceof ReturnValue) {
214
+ return e.value;
215
+ }
216
+ throw e;
217
+ }
218
+ }
219
+ else {
220
+ throw new Error(this.i18n.t('error_invalid_arguments') + ': Prozedur benötigt Argumente');
221
+ }
222
+ }
223
+ // Normale Variable
224
+ return value;
225
+ }
226
+ // 3. Built-In?
227
+ const builtIn = this.world.getBuiltIn(idExpr.name);
228
+ if (builtIn) {
229
+ return builtIn([]);
230
+ }
231
+ // 4. Nicht gefunden
232
+ let posInfo = '';
233
+ if (typeof idExpr.line === 'number' && typeof idExpr.column === 'number') {
234
+ posInfo = ` (Zeile ${idExpr.line}, Spalte ${idExpr.column})`;
235
+ }
236
+ throw new Error(this.i18n.t('error_undefined_variable', { name: idExpr.name }) + posInfo);
237
+ }
238
+ case 'BinaryExpression':
239
+ return this.evaluateBinaryExpression(expr);
240
+ case 'UnaryExpression':
241
+ return this.evaluateUnaryExpression(expr);
242
+ case 'CallExpression':
243
+ return this.evaluateCallExpression(expr);
244
+ case 'ParenthesizedExpression': {
245
+ const parenExpr = expr;
246
+ return this.evaluate(parenExpr.expression);
247
+ }
248
+ case 'PrivateAttribute': {
249
+ const privExpr = expr;
250
+ const state = this.world.getLennyState();
251
+ return state[privExpr.name] ?? null;
252
+ }
253
+ case 'GlobalAttribute': {
254
+ const globExpr = expr;
255
+ try {
256
+ return this.world.getGlobal(globExpr.name);
257
+ }
258
+ catch {
259
+ return null;
260
+ }
261
+ }
262
+ default:
263
+ throw new Error(this.i18n.t('error_unknown_expression_type', {
264
+ type: expr.type,
265
+ }));
266
+ }
267
+ }
268
+ evaluateBinaryExpression(expr) {
269
+ const left = this.evaluate(expr.left);
270
+ const right = this.evaluate(expr.right);
271
+ const operators = {
272
+ '+': (l, r) => l + r,
273
+ '-': (l, r) => l - r,
274
+ '*': (l, r) => l * r,
275
+ '/': (l, r) => {
276
+ if (r === 0)
277
+ throw new Error(this.i18n.t('error_division_by_zero'));
278
+ return l / r;
279
+ },
280
+ '%': (l, r) => l % r,
281
+ '**': (l, r) => Math.pow(l, r),
282
+ '<': (l, r) => l < r,
283
+ '>': (l, r) => l > r,
284
+ '<=': (l, r) => l <= r,
285
+ '>=': (l, r) => l >= r,
286
+ '==': (l, r) => l === r,
287
+ '<>': (l, r) => l !== r,
288
+ 'and': (l, r) => this.isTruthy(l) && this.isTruthy(r),
289
+ 'und': (l, r) => this.isTruthy(l) && this.isTruthy(r),
290
+ 'et': (l, r) => this.isTruthy(l) && this.isTruthy(r),
291
+ 'y': (l, r) => this.isTruthy(l) && this.isTruthy(r),
292
+ 'e': (l, r) => this.isTruthy(l) && this.isTruthy(r),
293
+ 'or': (l, r) => this.isTruthy(l) || this.isTruthy(r),
294
+ 'oder': (l, r) => this.isTruthy(l) || this.isTruthy(r),
295
+ 'ou': (l, r) => this.isTruthy(l) || this.isTruthy(r),
296
+ 'o': (l, r) => this.isTruthy(l) || this.isTruthy(r),
297
+ };
298
+ const operator = operators[expr.operator];
299
+ if (!operator) {
300
+ throw new Error(this.i18n.t('error_unknown_operator', { op: expr.operator }));
301
+ }
302
+ return operator(left, right);
303
+ }
304
+ evaluateUnaryExpression(expr) {
305
+ const operand = this.evaluate(expr.argument);
306
+ switch (expr.operator.toLowerCase()) {
307
+ case 'not':
308
+ case 'nicht':
309
+ case 'no':
310
+ return !this.isTruthy(operand);
311
+ case '+':
312
+ if (operand === null || operand === undefined)
313
+ return 0;
314
+ return +operand;
315
+ case '-':
316
+ if (operand === null || operand === undefined)
317
+ return 0;
318
+ return -operand;
319
+ default:
320
+ throw new Error(this.i18n.t('error_unknown_unary_operator', { op: expr.operator }));
321
+ }
322
+ }
323
+ evaluateCallExpression(expr) {
324
+ // Funktionsaufruf: callee kann Identifier sein
325
+ const callee = expr.callee;
326
+ if (callee.type !== 'Identifier') {
327
+ throw new Error(this.i18n.t('error_undefined_function', { name: '?' }));
328
+ }
329
+ const fnName = callee.name;
330
+ // 1. Prozedur?
331
+ if (this.currentEnv.has(fnName)) {
332
+ const value = this.currentEnv.get(fnName);
333
+ if (value && typeof value === 'object' && 'parameters' in value && 'body' in value) {
334
+ const procedure = value;
335
+ if (procedure.parameters.length !== expr.arguments.length) {
336
+ throw new Error(this.i18n.t('error_invalid_arguments'));
337
+ }
338
+ const procEnv = new world_1.LnyEnvironment(procedure.closure);
339
+ for (let i = 0; i < procedure.parameters.length; i++) {
340
+ procEnv.define(procedure.parameters[i], this.evaluate(expr.arguments[i]));
341
+ }
342
+ try {
343
+ this.executeBlock(procedure.body, procEnv);
344
+ return null;
345
+ }
346
+ catch (e) {
347
+ if (e instanceof ReturnValue) {
348
+ return e.value;
349
+ }
350
+ throw e;
351
+ }
352
+ }
353
+ }
354
+ // 2. Built-In?
355
+ const builtIn = this.world.getBuiltIn(fnName);
356
+ if (builtIn) {
357
+ return builtIn(expr.arguments.map(arg => this.evaluate(arg)));
358
+ }
359
+ // 3. Nicht gefunden
360
+ const pos = (callee.line && callee.column) ? ` (line ${callee.line}, column ${callee.column})` : '';
361
+ throw new Error(this.i18n.t('error_undefined_function', { name: fnName }) + pos);
362
+ }
363
+ applyCompoundOperator(operator, left, right) {
364
+ switch (operator) {
365
+ case '+=':
366
+ return left + right;
367
+ case '-=':
368
+ return left - right;
369
+ case '*=':
370
+ return left * right;
371
+ case '/=':
372
+ if (right === 0)
373
+ throw new Error(this.i18n.t('error_division_by_zero'));
374
+ return left / right;
375
+ default:
376
+ throw new Error(this.i18n.t('error_unknown_compound_operator', { op: operator }));
377
+ }
378
+ }
379
+ isTruthy(value) {
380
+ if (value === null || value === undefined)
381
+ return false;
382
+ if (typeof value === 'boolean')
383
+ return value;
384
+ if (typeof value === 'number')
385
+ return value !== 0;
386
+ if (typeof value === 'string')
387
+ return value.length > 0;
388
+ if (Array.isArray(value))
389
+ return value.length > 0;
390
+ return true;
391
+ }
392
+ lnyValueToString(value) {
393
+ if (value === null || value === undefined) {
394
+ return this.i18n.t('kw_nothing');
395
+ }
396
+ if (typeof value === 'boolean') {
397
+ return value ? this.i18n.t('kw_true') : this.i18n.t('kw_false');
398
+ }
399
+ if (Array.isArray(value)) {
400
+ return '[' + value.map((v) => this.lnyValueToString(v)).join(', ') + ']';
401
+ }
402
+ return String(value);
403
+ }
404
+ getOutput() {
405
+ return this.output.join('\n');
406
+ }
407
+ clearOutput() {
408
+ this.output = [];
409
+ }
410
+ getWorld() {
411
+ return this.world;
412
+ }
413
+ }
414
+ exports.Interpreter = Interpreter;
415
+ //# sourceMappingURL=interpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/interpreter/interpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { Language } from '../i18n/i18n';
2
+ export declare enum TokenType {
3
+ NUMBER = "NUMBER",
4
+ STRING = "STRING",
5
+ BOOLEAN = "BOOLEAN",
6
+ IF = "IF",
7
+ THEN = "THEN",
8
+ ELSE = "ELSE",
9
+ END = "END",
10
+ WHILE = "WHILE",
11
+ FOR = "FOR",
12
+ IN = "IN",
13
+ VAR = "VAR",
14
+ SET = "SET",
15
+ AUF = "AUF",
16
+ LIST = "LIST",
17
+ PROC = "PROC",
18
+ RETURN = "RETURN",
19
+ LOG = "LOG",
20
+ REM = "REM",
21
+ NOT = "NOT",
22
+ AND = "AND",
23
+ OR = "OR",
24
+ TRUE = "TRUE",
25
+ FALSE = "FALSE",
26
+ NOTHING = "NOTHING",
27
+ PRIVATE = "PRIVATE",
28
+ GLOBAL = "GLOBAL",
29
+ IDENTIFIER = "IDENTIFIER",
30
+ ASSIGN = "ASSIGN",// <<
31
+ PLUS_ASSIGN = "PLUS_ASSIGN",// +=
32
+ MINUS_ASSIGN = "MINUS_ASSIGN",// -=
33
+ MULT_ASSIGN = "MULT_ASSIGN",// *=
34
+ DIV_ASSIGN = "DIV_ASSIGN",// /=
35
+ PLUS = "PLUS",// +
36
+ MINUS = "MINUS",// -
37
+ MULTIPLY = "MULTIPLY",// *
38
+ DIVIDE = "DIVIDE",// /
39
+ MODULO = "MODULO",// %
40
+ POWER = "POWER",// **
41
+ EQUAL = "EQUAL",// ==
42
+ NOT_EQUAL = "NOT_EQUAL",// <>
43
+ LESS = "LESS",// <
44
+ GREATER = "GREATER",// >
45
+ LESS_EQUAL = "LESS_EQUAL",// <=
46
+ GREATER_EQUAL = "GREATER_EQUAL",// >=
47
+ LPAREN = "LPAREN",// (
48
+ RPAREN = "RPAREN",// )
49
+ LBRACKET = "LBRACKET",// [
50
+ RBRACKET = "RBRACKET",// ]
51
+ LBRACE = "LBRACE",// {
52
+ RBRACE = "RBRACE",// }
53
+ COMMA = "COMMA",// ,
54
+ DOT = "DOT",// .
55
+ EOF = "EOF",
56
+ NEWLINE = "NEWLINE"
57
+ }
58
+ export interface Token {
59
+ type: TokenType;
60
+ value: string;
61
+ line: number;
62
+ column: number;
63
+ }
64
+ export declare class Lexer {
65
+ private source;
66
+ private position;
67
+ private line;
68
+ private column;
69
+ private i18n;
70
+ private keywords;
71
+ constructor(source: string, language?: Language);
72
+ private syntax;
73
+ private buildKeywordMap;
74
+ tokenize(): Token[];
75
+ private nextToken;
76
+ private readString;
77
+ private readNumber;
78
+ private readIdentifierOrKeyword;
79
+ private skipWhitespace;
80
+ private normalizeKeyword;
81
+ private current;
82
+ private peek;
83
+ private advance;
84
+ private isDigit;
85
+ private isLetter;
86
+ }
87
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/lexer/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9C,oBAAY,SAAS;IAEnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IAGnB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,EAAE,OAAO;IAGT,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,IAAI,SAAS;IAGb,IAAI,SAAS;IACb,MAAM,WAAW;IAGjB,GAAG,QAAQ;IACX,GAAG,QAAQ;IAGX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IAGT,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IAGnB,OAAO,YAAY;IACnB,MAAM,WAAW;IAGjB,UAAU,eAAe;IAGzB,MAAM,WAAW,CAAE,KAAK;IACxB,WAAW,gBAAgB,CAAE,KAAK;IAClC,YAAY,iBAAiB,CAAE,KAAK;IACpC,WAAW,gBAAgB,CAAE,KAAK;IAClC,UAAU,eAAe,CAAE,KAAK;IAEhC,IAAI,SAAS,CAAE,IAAI;IACnB,KAAK,UAAU,CAAE,IAAI;IACrB,QAAQ,aAAa,CAAE,IAAI;IAC3B,MAAM,WAAW,CAAE,IAAI;IACvB,MAAM,WAAW,CAAE,IAAI;IACvB,KAAK,UAAU,CAAE,KAAK;IAEtB,KAAK,UAAU,CAAE,KAAK;IACtB,SAAS,cAAc,CAAE,KAAK;IAC9B,IAAI,SAAS,CAAE,IAAI;IACnB,OAAO,YAAY,CAAE,IAAI;IACzB,UAAU,eAAe,CAAE,KAAK;IAChC,aAAa,kBAAkB,CAAE,KAAK;IAGtC,MAAM,WAAW,CAAE,IAAI;IACvB,MAAM,WAAW,CAAE,IAAI;IACvB,QAAQ,aAAa,CAAE,IAAI;IAC3B,QAAQ,aAAa,CAAE,IAAI;IAC3B,MAAM,WAAW,CAAE,IAAI;IACvB,MAAM,WAAW,CAAE,IAAI;IACvB,KAAK,UAAU,CAAE,IAAI;IACrB,GAAG,QAAQ,CAAE,IAAI;IAGjB,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAe;IAMrD,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,eAAe;IA2CvB,QAAQ,IAAI,KAAK,EAAE;IAoBnB,OAAO,CAAC,SAAS;IA6JjB,OAAO,CAAC,UAAU;IAgDlB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAoD/B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;CAGjB"}