azkal-lang 0.1.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.
- package/dist/src/ast.d.ts +165 -0
- package/dist/src/ast.js +2 -0
- package/dist/src/ast.js.map +1 -0
- package/dist/src/environment.d.ts +26 -0
- package/dist/src/environment.js +30 -0
- package/dist/src/environment.js.map +1 -0
- package/dist/src/errors.d.ts +16 -0
- package/dist/src/errors.js +35 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +61 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interpreter.d.ts +34 -0
- package/dist/src/interpreter.js +619 -0
- package/dist/src/interpreter.js.map +1 -0
- package/dist/src/lexer.d.ts +23 -0
- package/dist/src/lexer.js +349 -0
- package/dist/src/lexer.js.map +1 -0
- package/dist/src/parser.d.ts +47 -0
- package/dist/src/parser.js +456 -0
- package/dist/src/parser.js.map +1 -0
- package/dist/src/repl.d.ts +1 -0
- package/dist/src/repl.js +60 -0
- package/dist/src/repl.js.map +1 -0
- package/dist/src/stdlib.d.ts +2 -0
- package/dist/src/stdlib.js +147 -0
- package/dist/src/stdlib.js.map +1 -0
- package/dist/src/tokens.d.ts +55 -0
- package/dist/src/tokens.js +74 -0
- package/dist/src/tokens.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Environment } from "./environment.js";
|
|
2
|
+
function native(name, arity, call) {
|
|
3
|
+
return { type: "native", name, arity, call };
|
|
4
|
+
}
|
|
5
|
+
function stringify(val) {
|
|
6
|
+
if (val === null)
|
|
7
|
+
return "null";
|
|
8
|
+
if (Array.isArray(val))
|
|
9
|
+
return "[" + val.map(stringify).join(", ") + "]";
|
|
10
|
+
if (val !== null && typeof val === "object" && "type" in val) {
|
|
11
|
+
if (val.type === "object") {
|
|
12
|
+
const obj = val;
|
|
13
|
+
const entries = [...obj.properties.entries()].map(([k, v]) => `${k}: ${stringify(v)}`);
|
|
14
|
+
return "{ " + entries.join(", ") + " }";
|
|
15
|
+
}
|
|
16
|
+
if (val.type === "function")
|
|
17
|
+
return `<fn ${val.name}>`;
|
|
18
|
+
if (val.type === "native")
|
|
19
|
+
return `<native ${val.name}>`;
|
|
20
|
+
}
|
|
21
|
+
return String(val);
|
|
22
|
+
}
|
|
23
|
+
export function createGlobals(capturedOutput = null) {
|
|
24
|
+
const env = new Environment();
|
|
25
|
+
// I/O
|
|
26
|
+
env.define("print", native("print", -1, (args) => {
|
|
27
|
+
const line = args.map(stringify).join(" ");
|
|
28
|
+
if (capturedOutput) {
|
|
29
|
+
capturedOutput.push(line);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(line);
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}));
|
|
36
|
+
// Type checking
|
|
37
|
+
env.define("type", native("type", 1, ([val]) => {
|
|
38
|
+
if (val === null)
|
|
39
|
+
return "null";
|
|
40
|
+
if (Array.isArray(val))
|
|
41
|
+
return "array";
|
|
42
|
+
if (typeof val === "object" && val !== null && "type" in val) {
|
|
43
|
+
if (val.type === "object")
|
|
44
|
+
return "object";
|
|
45
|
+
return "function";
|
|
46
|
+
}
|
|
47
|
+
return typeof val;
|
|
48
|
+
}));
|
|
49
|
+
// Conversions
|
|
50
|
+
env.define("num", native("num", 1, ([val]) => {
|
|
51
|
+
const n = Number(val);
|
|
52
|
+
return isNaN(n) ? null : n;
|
|
53
|
+
}));
|
|
54
|
+
env.define("str", native("str", 1, ([val]) => stringify(val)));
|
|
55
|
+
env.define("bool", native("bool", 1, ([val]) => {
|
|
56
|
+
if (val === null || val === false || val === 0 || val === "")
|
|
57
|
+
return false;
|
|
58
|
+
return true;
|
|
59
|
+
}));
|
|
60
|
+
// Math
|
|
61
|
+
env.define("abs", native("abs", 1, ([n]) => Math.abs(n)));
|
|
62
|
+
env.define("floor", native("floor", 1, ([n]) => Math.floor(n)));
|
|
63
|
+
env.define("ceil", native("ceil", 1, ([n]) => Math.ceil(n)));
|
|
64
|
+
env.define("round", native("round", 1, ([n]) => Math.round(n)));
|
|
65
|
+
env.define("min", native("min", 2, ([a, b]) => Math.min(a, b)));
|
|
66
|
+
env.define("max", native("max", 2, ([a, b]) => Math.max(a, b)));
|
|
67
|
+
env.define("sqrt", native("sqrt", 1, ([n]) => Math.sqrt(n)));
|
|
68
|
+
env.define("pow", native("pow", 2, ([a, b]) => Math.pow(a, b)));
|
|
69
|
+
env.define("random", native("random", 0, () => Math.random()));
|
|
70
|
+
env.define("PI", Math.PI);
|
|
71
|
+
// Array/String utilities
|
|
72
|
+
env.define("len", native("len", 1, ([val]) => {
|
|
73
|
+
if (Array.isArray(val))
|
|
74
|
+
return val.length;
|
|
75
|
+
if (typeof val === "string")
|
|
76
|
+
return val.length;
|
|
77
|
+
if (val !== null && typeof val === "object" && "type" in val && val.type === "object") {
|
|
78
|
+
return val.properties.size;
|
|
79
|
+
}
|
|
80
|
+
return 0;
|
|
81
|
+
}));
|
|
82
|
+
env.define("range", native("range", -1, (args) => {
|
|
83
|
+
let start = 0, end = 0, step = 1;
|
|
84
|
+
if (args.length === 1) {
|
|
85
|
+
end = args[0];
|
|
86
|
+
}
|
|
87
|
+
else if (args.length === 2) {
|
|
88
|
+
start = args[0];
|
|
89
|
+
end = args[1];
|
|
90
|
+
}
|
|
91
|
+
else if (args.length >= 3) {
|
|
92
|
+
start = args[0];
|
|
93
|
+
end = args[1];
|
|
94
|
+
step = args[2];
|
|
95
|
+
}
|
|
96
|
+
const result = [];
|
|
97
|
+
if (step > 0) {
|
|
98
|
+
for (let i = start; i < end; i += step)
|
|
99
|
+
result.push(i);
|
|
100
|
+
}
|
|
101
|
+
else if (step < 0) {
|
|
102
|
+
for (let i = start; i > end; i += step)
|
|
103
|
+
result.push(i);
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}));
|
|
107
|
+
env.define("join", native("join", 2, ([arr, sep]) => {
|
|
108
|
+
if (!Array.isArray(arr))
|
|
109
|
+
return stringify(arr);
|
|
110
|
+
return arr.map(stringify).join(sep);
|
|
111
|
+
}));
|
|
112
|
+
env.define("slice", native("slice", 3, ([val, start, end]) => {
|
|
113
|
+
if (Array.isArray(val))
|
|
114
|
+
return val.slice(start, end);
|
|
115
|
+
if (typeof val === "string")
|
|
116
|
+
return val.slice(start, end);
|
|
117
|
+
return null;
|
|
118
|
+
}));
|
|
119
|
+
env.define("append", native("append", 2, ([arr, val]) => {
|
|
120
|
+
if (!Array.isArray(arr))
|
|
121
|
+
return null;
|
|
122
|
+
return [...arr, val];
|
|
123
|
+
}));
|
|
124
|
+
env.define("reverse", native("reverse", 1, ([val]) => {
|
|
125
|
+
if (Array.isArray(val))
|
|
126
|
+
return [...val].reverse();
|
|
127
|
+
if (typeof val === "string")
|
|
128
|
+
return val.split("").reverse().join("");
|
|
129
|
+
return val;
|
|
130
|
+
}));
|
|
131
|
+
env.define("keys", native("keys", 1, ([val]) => {
|
|
132
|
+
if (val !== null && typeof val === "object" && "type" in val && val.type === "object") {
|
|
133
|
+
return [...val.properties.keys()];
|
|
134
|
+
}
|
|
135
|
+
return [];
|
|
136
|
+
}));
|
|
137
|
+
env.define("values", native("values", 1, ([val]) => {
|
|
138
|
+
if (val !== null && typeof val === "object" && "type" in val && val.type === "object") {
|
|
139
|
+
return [...val.properties.values()];
|
|
140
|
+
}
|
|
141
|
+
return [];
|
|
142
|
+
}));
|
|
143
|
+
// Time
|
|
144
|
+
env.define("clock", native("clock", 0, () => Date.now()));
|
|
145
|
+
return env;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=stdlib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdlib.js","sourceRoot":"","sources":["../../src/stdlib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare enum TokenType {
|
|
2
|
+
Number = "Number",
|
|
3
|
+
String = "String",
|
|
4
|
+
Identifier = "Identifier",
|
|
5
|
+
Boolean = "Boolean",
|
|
6
|
+
Null = "Null",
|
|
7
|
+
Plus = "+",
|
|
8
|
+
Minus = "-",
|
|
9
|
+
Star = "*",
|
|
10
|
+
Slash = "/",
|
|
11
|
+
Percent = "%",
|
|
12
|
+
Assign = "=",
|
|
13
|
+
Eq = "==",
|
|
14
|
+
NotEq = "!=",
|
|
15
|
+
Lt = "<",
|
|
16
|
+
Gt = ">",
|
|
17
|
+
LtEq = "<=",
|
|
18
|
+
GtEq = ">=",
|
|
19
|
+
Bang = "!",
|
|
20
|
+
And = "and",
|
|
21
|
+
Or = "or",
|
|
22
|
+
LParen = "(",
|
|
23
|
+
RParen = ")",
|
|
24
|
+
LBrace = "{",
|
|
25
|
+
RBrace = "}",
|
|
26
|
+
LBracket = "[",
|
|
27
|
+
RBracket = "]",
|
|
28
|
+
Comma = ",",
|
|
29
|
+
Dot = ".",
|
|
30
|
+
Colon = ":",
|
|
31
|
+
Let = "let",
|
|
32
|
+
Fn = "fn",
|
|
33
|
+
Return = "return",
|
|
34
|
+
If = "if",
|
|
35
|
+
Else = "else",
|
|
36
|
+
While = "while",
|
|
37
|
+
For = "for",
|
|
38
|
+
In = "in",
|
|
39
|
+
Break = "break",
|
|
40
|
+
Continue = "continue",
|
|
41
|
+
TemplateString = "TemplateString",
|
|
42
|
+
TemplateExprStart = "${",
|
|
43
|
+
TemplateExprEnd = "}$",
|
|
44
|
+
PipeOp = "|>",
|
|
45
|
+
Spread = "...",
|
|
46
|
+
Newline = "Newline",
|
|
47
|
+
EOF = "EOF"
|
|
48
|
+
}
|
|
49
|
+
export interface Token {
|
|
50
|
+
type: TokenType;
|
|
51
|
+
value: string;
|
|
52
|
+
line: number;
|
|
53
|
+
col: number;
|
|
54
|
+
}
|
|
55
|
+
export declare const KEYWORDS: Record<string, TokenType>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export var TokenType;
|
|
2
|
+
(function (TokenType) {
|
|
3
|
+
// Literals
|
|
4
|
+
TokenType["Number"] = "Number";
|
|
5
|
+
TokenType["String"] = "String";
|
|
6
|
+
TokenType["Identifier"] = "Identifier";
|
|
7
|
+
TokenType["Boolean"] = "Boolean";
|
|
8
|
+
TokenType["Null"] = "Null";
|
|
9
|
+
// Operators
|
|
10
|
+
TokenType["Plus"] = "+";
|
|
11
|
+
TokenType["Minus"] = "-";
|
|
12
|
+
TokenType["Star"] = "*";
|
|
13
|
+
TokenType["Slash"] = "/";
|
|
14
|
+
TokenType["Percent"] = "%";
|
|
15
|
+
TokenType["Assign"] = "=";
|
|
16
|
+
TokenType["Eq"] = "==";
|
|
17
|
+
TokenType["NotEq"] = "!=";
|
|
18
|
+
TokenType["Lt"] = "<";
|
|
19
|
+
TokenType["Gt"] = ">";
|
|
20
|
+
TokenType["LtEq"] = "<=";
|
|
21
|
+
TokenType["GtEq"] = ">=";
|
|
22
|
+
TokenType["Bang"] = "!";
|
|
23
|
+
TokenType["And"] = "and";
|
|
24
|
+
TokenType["Or"] = "or";
|
|
25
|
+
// Delimiters
|
|
26
|
+
TokenType["LParen"] = "(";
|
|
27
|
+
TokenType["RParen"] = ")";
|
|
28
|
+
TokenType["LBrace"] = "{";
|
|
29
|
+
TokenType["RBrace"] = "}";
|
|
30
|
+
TokenType["LBracket"] = "[";
|
|
31
|
+
TokenType["RBracket"] = "]";
|
|
32
|
+
TokenType["Comma"] = ",";
|
|
33
|
+
TokenType["Dot"] = ".";
|
|
34
|
+
TokenType["Colon"] = ":";
|
|
35
|
+
// Keywords
|
|
36
|
+
TokenType["Let"] = "let";
|
|
37
|
+
TokenType["Fn"] = "fn";
|
|
38
|
+
TokenType["Return"] = "return";
|
|
39
|
+
TokenType["If"] = "if";
|
|
40
|
+
TokenType["Else"] = "else";
|
|
41
|
+
TokenType["While"] = "while";
|
|
42
|
+
TokenType["For"] = "for";
|
|
43
|
+
TokenType["In"] = "in";
|
|
44
|
+
TokenType["Break"] = "break";
|
|
45
|
+
TokenType["Continue"] = "continue";
|
|
46
|
+
// String interpolation
|
|
47
|
+
TokenType["TemplateString"] = "TemplateString";
|
|
48
|
+
TokenType["TemplateExprStart"] = "${";
|
|
49
|
+
TokenType["TemplateExprEnd"] = "}$";
|
|
50
|
+
// Operators (extra)
|
|
51
|
+
TokenType["PipeOp"] = "|>";
|
|
52
|
+
TokenType["Spread"] = "...";
|
|
53
|
+
// Special
|
|
54
|
+
TokenType["Newline"] = "Newline";
|
|
55
|
+
TokenType["EOF"] = "EOF";
|
|
56
|
+
})(TokenType || (TokenType = {}));
|
|
57
|
+
export const KEYWORDS = {
|
|
58
|
+
let: TokenType.Let,
|
|
59
|
+
fn: TokenType.Fn,
|
|
60
|
+
return: TokenType.Return,
|
|
61
|
+
if: TokenType.If,
|
|
62
|
+
else: TokenType.Else,
|
|
63
|
+
while: TokenType.While,
|
|
64
|
+
for: TokenType.For,
|
|
65
|
+
in: TokenType.In,
|
|
66
|
+
break: TokenType.Break,
|
|
67
|
+
continue: TokenType.Continue,
|
|
68
|
+
and: TokenType.And,
|
|
69
|
+
or: TokenType.Or,
|
|
70
|
+
true: TokenType.Boolean,
|
|
71
|
+
false: TokenType.Boolean,
|
|
72
|
+
null: TokenType.Null,
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SA4DX;AA5DD,WAAY,SAAS;IACnB,WAAW;IACX,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,sCAAyB,CAAA;IACzB,gCAAmB,CAAA;IACnB,0BAAa,CAAA;IAEb,YAAY;IACZ,uBAAU,CAAA;IACV,wBAAW,CAAA;IACX,uBAAU,CAAA;IACV,wBAAW,CAAA;IACX,0BAAa,CAAA;IACb,yBAAY,CAAA;IACZ,sBAAS,CAAA;IACT,yBAAY,CAAA;IACZ,qBAAQ,CAAA;IACR,qBAAQ,CAAA;IACR,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,uBAAU,CAAA;IACV,wBAAW,CAAA;IACX,sBAAS,CAAA;IAET,aAAa;IACb,yBAAY,CAAA;IACZ,yBAAY,CAAA;IACZ,yBAAY,CAAA;IACZ,yBAAY,CAAA;IACZ,2BAAc,CAAA;IACd,2BAAc,CAAA;IACd,wBAAW,CAAA;IACX,sBAAS,CAAA;IACT,wBAAW,CAAA;IAEX,WAAW;IACX,wBAAW,CAAA;IACX,sBAAS,CAAA;IACT,8BAAiB,CAAA;IACjB,sBAAS,CAAA;IACT,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,wBAAW,CAAA;IACX,sBAAS,CAAA;IACT,4BAAe,CAAA;IACf,kCAAqB,CAAA;IAErB,uBAAuB;IACvB,8CAAiC,CAAA;IACjC,qCAAwB,CAAA;IACxB,mCAAsB,CAAA;IAEtB,oBAAoB;IACpB,0BAAa,CAAA;IACb,2BAAc,CAAA;IAEd,UAAU;IACV,gCAAmB,CAAA;IACnB,wBAAW,CAAA;AACb,CAAC,EA5DW,SAAS,KAAT,SAAS,QA4DpB;AASD,MAAM,CAAC,MAAM,QAAQ,GAA8B;IACjD,GAAG,EAAE,SAAS,CAAC,GAAG;IAClB,EAAE,EAAE,SAAS,CAAC,EAAE;IAChB,MAAM,EAAE,SAAS,CAAC,MAAM;IACxB,EAAE,EAAE,SAAS,CAAC,EAAE;IAChB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,GAAG,EAAE,SAAS,CAAC,GAAG;IAClB,EAAE,EAAE,SAAS,CAAC,EAAE;IAChB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;IAClB,EAAE,EAAE,SAAS,CAAC,EAAE;IAChB,IAAI,EAAE,SAAS,CAAC,OAAO;IACvB,KAAK,EAAE,SAAS,CAAC,OAAO;IACxB,IAAI,EAAE,SAAS,CAAC,IAAI;CACrB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "azkal-lang",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "The Azkal programming language — built from scratch in TypeScript",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"azkal": "dist/src/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/src/**/*",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/Ialkyyyy/azkal-lang"
|
|
18
|
+
},
|
|
19
|
+
"author": "alky",
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"dev": "tsc --watch",
|
|
23
|
+
"start": "node dist/playground/server.js",
|
|
24
|
+
"repl": "node dist/src/index.js",
|
|
25
|
+
"cli": "node dist/src/index.js",
|
|
26
|
+
"playground": "node dist/playground/server.js",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"programming-language",
|
|
32
|
+
"interpreter",
|
|
33
|
+
"azkal"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^20.0.0",
|
|
38
|
+
"typescript": "^5.4.0",
|
|
39
|
+
"vitest": "^4.0.18"
|
|
40
|
+
}
|
|
41
|
+
}
|