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.
@@ -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":"AAAA,OAAO,EAAE,WAAW,EAAgD,MAAM,kBAAkB,CAAC;AAE7F,SAAS,MAAM,CAAC,IAAY,EAAE,KAAa,EAAE,IAAwC;IACnF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,SAAS,CAAC,GAAe;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IACzE,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAkB,CAAC;YAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC1C,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,iBAAkC,IAAI;IAClE,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAE9B,MAAM;IACN,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC,CAAC;IAEJ,gBAAgB;IAChB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC7C,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC3C,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,GAAG,CAAC;IACpB,CAAC,CAAC,CAAC,CAAC;IAEJ,cAAc;IACd,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/D,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC,CAAC;IAEJ,OAAO;IACP,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC;IACpE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAW,EAAE,CAAW,CAAC,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAW,EAAE,CAAW,CAAC,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAW,EAAE,CAAW,CAAC,CAAC,CAAC,CAAC;IACpF,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1B,yBAAyB;IACzB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC;QAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC;QAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtF,OAAQ,GAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YAC1B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YAC1B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,GAAa,CAAC,CAAC;QACzE,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,GAAa,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtF,OAAO,CAAC,GAAI,GAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QACjD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtF,OAAO,CAAC,GAAI,GAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC,CAAC;IAEJ,OAAO;IACP,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -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
+ }