lumos-language 1.1.2 → 2.0.2

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 (63) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/.npmrc.ci-backup +3 -0
  3. package/LICENSE +0 -29
  4. package/Lumos.png +0 -0
  5. package/README.md +284 -126
  6. package/STRUCTURE.md +216 -0
  7. package/examples/hello.lumos +5 -0
  8. package/index.cjs +125 -125
  9. package/index.html +120 -274
  10. package/package.json +20 -10
  11. package/src/backends/assembly/arm.js +39 -0
  12. package/src/backends/assembly/wasm.js +39 -0
  13. package/src/backends/assembly/x86.js +39 -0
  14. package/src/backends/compiled/c.js +39 -0
  15. package/src/backends/compiled/cpp.js +39 -0
  16. package/src/backends/compiled/csharp.js +39 -0
  17. package/src/backends/compiled/go.js +39 -0
  18. package/src/backends/compiled/java.js +39 -0
  19. package/src/backends/compiled/rust.js +39 -0
  20. package/src/backends/compiled/swift.js +39 -0
  21. package/src/backends/database/mongodb.js +39 -0
  22. package/src/backends/database/mysql.js +39 -0
  23. package/src/backends/database/postgresql.js +39 -0
  24. package/src/backends/database/sql.js +39 -0
  25. package/src/backends/database/sqlite.js +39 -0
  26. package/src/backends/functional/clojure.js +39 -0
  27. package/src/backends/functional/elixir.js +39 -0
  28. package/src/backends/functional/erlang.js +39 -0
  29. package/src/backends/functional/fsharp.js +39 -0
  30. package/src/backends/functional/haskell.js +39 -0
  31. package/src/backends/functional/scala.js +39 -0
  32. package/src/backends/interpreted/lua.js +39 -0
  33. package/src/backends/interpreted/perl.js +39 -0
  34. package/src/backends/interpreted/php.js +39 -0
  35. package/src/backends/interpreted/python.js +356 -0
  36. package/src/backends/interpreted/ruby.js +222 -0
  37. package/src/backends/scripting/bash.js +39 -0
  38. package/src/backends/scripting/javascript.js +39 -0
  39. package/src/backends/scripting/powershell.js +39 -0
  40. package/src/backends/scripting/typescript.js +39 -0
  41. package/src/backends/scripting/vbscript.js +39 -0
  42. package/src/backends/specialized/ada.js +39 -0
  43. package/src/backends/specialized/cobol.js +39 -0
  44. package/src/backends/specialized/fortran.js +39 -0
  45. package/src/backends/specialized/lisp.js +39 -0
  46. package/src/backends/specialized/mlang.js +39 -0
  47. package/src/backends/specialized/prolog.js +39 -0
  48. package/src/backends/web/css.js +39 -0
  49. package/src/backends/web/html.js +39 -0
  50. package/src/backends/web/jsx.js +39 -0
  51. package/src/backends/web/vue.js +39 -0
  52. package/src/cli/fileRunner.js +82 -0
  53. package/src/cli/repl.js +244 -0
  54. package/src/compiler/core/compiler.js +1350 -0
  55. package/src/compiler/framework-integrator.js +846 -0
  56. package/src/compiler/generators/dynamic-languages.js +620 -0
  57. package/src/compiler/generators/system-languages.js +1184 -0
  58. package/src/core/compiler.js +181 -0
  59. package/src/core/evaluator.js +408 -0
  60. package/src/core/lexer.js +251 -0
  61. package/src/core/parser.js +452 -0
  62. package/src/core/runtime.js +173 -0
  63. package/tests/run-tests.js +243 -0
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,39 @@
1
+ class Backend {
2
+ generate(ast, options = {}) {
3
+ this.output = [];
4
+ this.indent = 0;
5
+ this.generateNode(ast);
6
+ return this.output.join('\n');
7
+ }
8
+
9
+ generateNode(node) {
10
+ if (!node) return '';
11
+ switch (node.type) {
12
+ case 'Program': return this.generateProgram(node);
13
+ case 'VariableDeclaration': return this.generateVariableDeclaration(node);
14
+ case 'FunctionDeclaration': return this.generateFunctionDeclaration(node);
15
+ default: return '';
16
+ }
17
+ }
18
+
19
+ generateProgram(node) {
20
+ for (const stmt of node.statements) {
21
+ this.generateNode(stmt);
22
+ }
23
+ }
24
+
25
+ generateVariableDeclaration(node) {
26
+ const value = node.initializer ? this.generateNode(node.initializer) : 'null';
27
+ this.write(`var ${node.name} = ${value};`);
28
+ }
29
+
30
+ generateFunctionDeclaration(node) {
31
+ this.write(`function ${node.name}() {}`);
32
+ }
33
+
34
+ write(line) {
35
+ this.output.push(' '.repeat(this.indent) + line);
36
+ }
37
+ }
38
+
39
+ module.exports = new Backend();
@@ -0,0 +1,82 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+
4
+ class FileRunner {
5
+ constructor(engine) {
6
+ this.engine = engine;
7
+ }
8
+
9
+ run(filepath) {
10
+ if (!fs.existsSync(filepath)) {
11
+ throw new Error(`File not found: ${filepath}`);
12
+ }
13
+
14
+ const ext = path.extname(filepath);
15
+ if (ext !== '.lumos') {
16
+ console.warn(`Warning: Expected .lumos file, got ${ext}`);
17
+ }
18
+
19
+ const code = fs.readFileSync(filepath, 'utf8');
20
+ const lines = code.split(/\r?\n/);
21
+
22
+ let result = null;
23
+ let lineNumber = 1;
24
+
25
+ for (const line of lines) {
26
+ const trimmed = line.trim();
27
+
28
+ if (trimmed === '' || trimmed.startsWith('//')) {
29
+ lineNumber++;
30
+ continue;
31
+ }
32
+
33
+ try {
34
+ result = this.engine.execute(trimmed);
35
+ if (result !== null && result !== undefined) {
36
+ console.log(`Line ${lineNumber}: ${this.formatOutput(result)}`);
37
+ }
38
+ } catch (error) {
39
+ console.error(`Error on line ${lineNumber}: ${error.message}`);
40
+ console.error(`Code: ${trimmed}`);
41
+ throw error;
42
+ }
43
+
44
+ lineNumber++;
45
+ }
46
+
47
+ return result;
48
+ }
49
+
50
+ runWithCompilation(filepath, target, outputPath) {
51
+ if (!fs.existsSync(filepath)) {
52
+ throw new Error(`File not found: ${filepath}`);
53
+ }
54
+
55
+ const code = fs.readFileSync(filepath, 'utf8');
56
+ const compiled = this.engine.compileToTarget(code, target);
57
+
58
+ if (outputPath) {
59
+ fs.writeFileSync(outputPath, compiled);
60
+ console.log(`Compiled output written to: ${outputPath}`);
61
+ }
62
+
63
+ return compiled;
64
+ }
65
+
66
+ formatOutput(value) {
67
+ if (value === null) return 'null';
68
+ if (value === undefined) return 'undefined';
69
+ if (typeof value === 'string') return `"${value}"`;
70
+ if (typeof value === 'function') return '[Function]';
71
+ if (typeof value === 'object') {
72
+ try {
73
+ return JSON.stringify(value);
74
+ } catch {
75
+ return '[Object]';
76
+ }
77
+ }
78
+ return String(value);
79
+ }
80
+ }
81
+
82
+ module.exports = FileRunner;