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,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();