mimo-lang 1.0.0 → 1.0.1
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.
- package/converter/go/convert.js +17 -7
- package/index.js +0 -8
- package/package.json +2 -2
package/converter/go/convert.js
CHANGED
|
@@ -29,20 +29,31 @@ function generateGoCodeFromAst(node) {
|
|
|
29
29
|
|
|
30
30
|
export function generateGoCodeFromAstArray(ast) {
|
|
31
31
|
declaredVariables = new Set();
|
|
32
|
-
const
|
|
32
|
+
const functionCode = ast
|
|
33
|
+
.filter((node) => node.type === "function")
|
|
34
|
+
.map(generateGoCodeFromAst)
|
|
35
|
+
.join("\n\n");
|
|
36
|
+
const otherCode = ast
|
|
37
|
+
.filter((node) => node.type !== "function")
|
|
38
|
+
.map(generateGoCodeFromAst)
|
|
39
|
+
.join("\n");
|
|
33
40
|
return formatGoCode(`
|
|
34
41
|
package main
|
|
35
42
|
|
|
36
43
|
import "fmt"
|
|
37
44
|
|
|
38
|
-
${
|
|
45
|
+
${functionCode}
|
|
46
|
+
|
|
47
|
+
func main() {
|
|
48
|
+
${otherCode}
|
|
49
|
+
}
|
|
39
50
|
`);
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
function generateFunction(node) {
|
|
43
|
-
const params = node.params.join(", ");
|
|
54
|
+
const params = node.params.map((p) => `${p} any`).join(", ");
|
|
44
55
|
const body = node.body.map(generateGoCodeFromAst).join("\n");
|
|
45
|
-
return `func ${node.name}(${params})
|
|
56
|
+
return `func ${node.name}(${params}) any {\n${body}\n}`;
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
function generateAssignment(node) {
|
|
@@ -51,7 +62,7 @@ function generateAssignment(node) {
|
|
|
51
62
|
prefix = "var ";
|
|
52
63
|
declaredVariables.add(node.target);
|
|
53
64
|
}
|
|
54
|
-
return `${prefix}${node.target}
|
|
65
|
+
return `${prefix}${node.target} = ${generateGoCodeFromAst(node.value)}`;
|
|
55
66
|
}
|
|
56
67
|
|
|
57
68
|
function generateWhile(node) {
|
|
@@ -79,12 +90,11 @@ function generateCall(node) {
|
|
|
79
90
|
prefix = "var ";
|
|
80
91
|
declaredVariables.add(node.target);
|
|
81
92
|
}
|
|
82
|
-
callCode = `${prefix}${node.target}
|
|
93
|
+
callCode = `${prefix}${node.target} = ${callCode}`;
|
|
83
94
|
}
|
|
84
95
|
return callCode;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
|
-
|
|
88
98
|
function generatePrint(node) {
|
|
89
99
|
return `fmt.Println(${generateGoCodeFromAst(node.value)})`;
|
|
90
100
|
}
|
package/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { generateTokens } from "./compiler/lexer/tokenizer";
|
|
2
2
|
import { parseTokens } from "./compiler/parser/parser";
|
|
3
3
|
import { interpret } from "./compiler/execute/interpreter";
|
|
4
|
-
import { generateGoCodeFromAstArray } from "./converter/go/convert";
|
|
5
4
|
import { generateCodeJsFromAstArray } from "./converter/js/convert";
|
|
6
|
-
import fs from "fs";
|
|
7
5
|
|
|
8
6
|
// The main class for the Mimo language
|
|
9
7
|
export default class Mimo {
|
|
@@ -38,11 +36,5 @@ export default class Mimo {
|
|
|
38
36
|
toJS(ast) {
|
|
39
37
|
return generateCodeJsFromAstArray(ast);
|
|
40
38
|
}
|
|
41
|
-
|
|
42
|
-
// Convert the AST to Go code
|
|
43
|
-
toGO(ast) {
|
|
44
|
-
return generateGoCodeFromAstArray(ast);
|
|
45
|
-
}
|
|
46
39
|
}
|
|
47
40
|
|
|
48
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mimo-lang",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "A programming language made in javascript mostly for learning purposes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"programing language"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@types/bun": "latest"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"esformatter": "^0.
|
|
23
|
+
"esformatter": "^0.8.2"
|
|
24
24
|
},
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|