samskritam-lang 1.0.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.
Files changed (56) hide show
  1. package/README.md +184 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +205 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/src/errors/index.d.ts +27 -0
  7. package/dist/src/errors/index.d.ts.map +1 -0
  8. package/dist/src/errors/index.js +58 -0
  9. package/dist/src/errors/index.js.map +1 -0
  10. package/dist/src/index.d.ts +7 -0
  11. package/dist/src/index.d.ts.map +1 -0
  12. package/dist/src/index.js +35 -0
  13. package/dist/src/index.js.map +1 -0
  14. package/dist/src/interpreter/environment.d.ts +10 -0
  15. package/dist/src/interpreter/environment.d.ts.map +1 -0
  16. package/dist/src/interpreter/environment.js +41 -0
  17. package/dist/src/interpreter/environment.js.map +1 -0
  18. package/dist/src/interpreter/index.d.ts +3 -0
  19. package/dist/src/interpreter/index.d.ts.map +1 -0
  20. package/dist/src/interpreter/index.js +8 -0
  21. package/dist/src/interpreter/index.js.map +1 -0
  22. package/dist/src/interpreter/interpreter.d.ts +26 -0
  23. package/dist/src/interpreter/interpreter.d.ts.map +1 -0
  24. package/dist/src/interpreter/interpreter.js +273 -0
  25. package/dist/src/interpreter/interpreter.js.map +1 -0
  26. package/dist/src/lexer/index.d.ts +3 -0
  27. package/dist/src/lexer/index.d.ts.map +1 -0
  28. package/dist/src/lexer/index.js +10 -0
  29. package/dist/src/lexer/index.js.map +1 -0
  30. package/dist/src/lexer/tokenizer.d.ts +26 -0
  31. package/dist/src/lexer/tokenizer.d.ts.map +1 -0
  32. package/dist/src/lexer/tokenizer.js +332 -0
  33. package/dist/src/lexer/tokenizer.js.map +1 -0
  34. package/dist/src/lexer/tokens.d.ts +56 -0
  35. package/dist/src/lexer/tokens.d.ts.map +1 -0
  36. package/dist/src/lexer/tokens.js +86 -0
  37. package/dist/src/lexer/tokens.js.map +1 -0
  38. package/dist/src/parser/ast.d.ts +115 -0
  39. package/dist/src/parser/ast.d.ts.map +1 -0
  40. package/dist/src/parser/ast.js +4 -0
  41. package/dist/src/parser/ast.js.map +1 -0
  42. package/dist/src/parser/index.d.ts +3 -0
  43. package/dist/src/parser/index.d.ts.map +1 -0
  44. package/dist/src/parser/index.js +21 -0
  45. package/dist/src/parser/index.js.map +1 -0
  46. package/dist/src/parser/parser.d.ts +38 -0
  47. package/dist/src/parser/parser.d.ts.map +1 -0
  48. package/dist/src/parser/parser.js +417 -0
  49. package/dist/src/parser/parser.js.map +1 -0
  50. package/examples/fibonacci.sam +21 -0
  51. package/examples/fizzbuzz.sam +21 -0
  52. package/examples/functions.sam +49 -0
  53. package/examples/hello.sam +8 -0
  54. package/examples/loops.sam +37 -0
  55. package/examples/variables.sam +23 -0
  56. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,184 @@
1
+ # Samskritam (संस्कृतम्)
2
+
3
+ A toy programming language with **Sanskrit keywords**. Inspired by [Bhailang](https://bhailang.js.org/) — but in the language of the gods!
4
+
5
+ ```
6
+ namaskaram
7
+
8
+ vadah "Namaste, Vishva!";
9
+
10
+ viramah
11
+ ```
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install -g samskritam-lang
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```bash
22
+ # Run a program
23
+ samskritam run hello.sam
24
+
25
+ # Interactive REPL
26
+ samskritam repl
27
+
28
+ # Show help
29
+ samskritam help
30
+ ```
31
+
32
+ ## Syntax Reference
33
+
34
+ | Samskritam | Equivalent | Sanskrit Meaning |
35
+ |---|---|---|
36
+ | `namaskaram` | Program Start | Greetings |
37
+ | `viramah` | Program End | Stop |
38
+ | `mana` | let/var | Think |
39
+ | `vadah` | print | Speak |
40
+ | `yadi` | if | If |
41
+ | `athava yadi` | else if | Or if |
42
+ | `anyatha` | else | Otherwise |
43
+ | `yavat` | while | As long as |
44
+ | `viramah kuru` | break | Do stop |
45
+ | `agrima` | continue | Next |
46
+ | `kriya` | function | Action |
47
+ | `pratyarpaya` | return | Give back |
48
+ | `satyam` | true | Truth |
49
+ | `asatyam` | false | Untruth |
50
+ | `shunya` | null | Void/Zero |
51
+
52
+ ## Data Types
53
+
54
+ - **Numbers**: `42`, `3.14`, `-7`
55
+ - **Strings**: `"Namaste"`, `'hello'`
56
+ - **Booleans**: `satyam` (true), `asatyam` (false)
57
+ - **Null**: `shunya`
58
+
59
+ ## Examples
60
+
61
+ ### Variables
62
+
63
+ ```
64
+ namaskaram
65
+ mana naam = "Arjuna";
66
+ mana vayah = 25;
67
+ vadah "Naam: " + naam;
68
+ vadah "Vayah: " + vayah;
69
+ viramah
70
+ ```
71
+
72
+ ### Conditionals
73
+
74
+ ```
75
+ namaskaram
76
+ mana marks = 85;
77
+ yadi (marks >= 90) {
78
+ vadah "Uttamam! (Excellent!)";
79
+ } athava yadi (marks >= 60) {
80
+ vadah "Shobhanam! (Good!)";
81
+ } anyatha {
82
+ vadah "Prayatnam kuru! (Try harder!)";
83
+ }
84
+ viramah
85
+ ```
86
+
87
+ ### Loops
88
+
89
+ ```
90
+ namaskaram
91
+ mana i = 1;
92
+ yavat (i <= 5) {
93
+ vadah i;
94
+ i += 1;
95
+ }
96
+ viramah
97
+ ```
98
+
99
+ ### Functions & Recursion
100
+
101
+ ```
102
+ namaskaram
103
+ kriya factorial(n) {
104
+ yadi (n <= 1) {
105
+ pratyarpaya 1;
106
+ }
107
+ pratyarpaya n * factorial(n - 1);
108
+ }
109
+
110
+ vadah "5! = " + factorial(5);
111
+ // Output: 5! = 120
112
+ viramah
113
+ ```
114
+
115
+ ### FizzBuzz
116
+
117
+ ```
118
+ namaskaram
119
+ mana i = 1;
120
+ yavat (i <= 30) {
121
+ yadi (i % 15 == 0) {
122
+ vadah "SamskritamBuzz!";
123
+ } athava yadi (i % 3 == 0) {
124
+ vadah "Samskritam";
125
+ } athava yadi (i % 5 == 0) {
126
+ vadah "Buzz";
127
+ } anyatha {
128
+ vadah i;
129
+ }
130
+ i += 1;
131
+ }
132
+ viramah
133
+ ```
134
+
135
+ ## Development
136
+
137
+ ```bash
138
+ # Install dependencies
139
+ npm install
140
+
141
+ # Build
142
+ npm run build
143
+
144
+ # Run tests
145
+ npm test
146
+
147
+ # Bundle for browser
148
+ npm run build:browser
149
+
150
+ # Run example
151
+ npx ts-node cli/index.ts run examples/hello.sam
152
+ ```
153
+
154
+ ## Project Structure
155
+
156
+ ```
157
+ sanskrit-lang/
158
+ src/
159
+ lexer/ # Tokenizer
160
+ parser/ # Recursive descent parser + AST
161
+ interpreter/ # Tree-walking interpreter
162
+ errors/ # Sanskrit error messages
163
+ cli/ # CLI tool
164
+ website/ # Interactive playground
165
+ examples/ # Example .sam programs
166
+ tests/ # Test suite
167
+ ```
168
+
169
+ ## Live Playground
170
+
171
+ Try it online: [sanskrit-lang.vercel.app](https://sanskrit-lang.vercel.app)
172
+
173
+ ## Author
174
+
175
+ Built by **[aannuuj](https://github.com/aannuuj)** | [LinkedIn](https://linkedin.com/in/hariompalkar)
176
+
177
+ ## License
178
+
179
+ MIT
180
+
181
+ ---
182
+
183
+ Built with love for Sanskrit & Programming.
184
+ Inspired by [Bhailang](https://bhailang.js.org/).
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const readline = __importStar(require("readline"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const interpreter_1 = require("../src/interpreter");
45
+ const errors_1 = require("../src/errors");
46
+ const VERSION = "1.0.0";
47
+ const BANNER = chalk_1.default.yellow(`
48
+ ╔═══════════════════════════════════════════════╗
49
+ ║ ║
50
+ ║ ${chalk_1.default.bold("संस्कृतम्")} ${chalk_1.default.white("Samskritam Lang")} v${VERSION} ║
51
+ ║ ║
52
+ ║ ${chalk_1.default.dim("A toy programming language in Sanskrit")} ║
53
+ ║ ║
54
+ ╚═══════════════════════════════════════════════╝
55
+ `);
56
+ function run(filePath) {
57
+ const resolvedPath = path.resolve(filePath);
58
+ if (!fs.existsSync(resolvedPath)) {
59
+ console.error(chalk_1.default.red(`Kim karoshi? File not found: ${resolvedPath}`));
60
+ process.exit(1);
61
+ }
62
+ if (!resolvedPath.endsWith(".sam")) {
63
+ console.error(chalk_1.default.red(`Kim karoshi? Expected a .sam file, got: ${path.extname(resolvedPath) || "no extension"}`));
64
+ process.exit(1);
65
+ }
66
+ const source = fs.readFileSync(resolvedPath, "utf-8");
67
+ const interpreter = new interpreter_1.Interpreter();
68
+ try {
69
+ interpreter.interpret(source);
70
+ console.log(chalk_1.default.green("\nSaphalam! 🎉 (Program executed successfully)"));
71
+ }
72
+ catch (error) {
73
+ if (error instanceof errors_1.SamskritamError) {
74
+ console.error(chalk_1.default.red(`\n${error.toString()}`));
75
+ }
76
+ else if (error instanceof Error) {
77
+ console.error(chalk_1.default.red(`\nKim karoshi? ${error.message}`));
78
+ }
79
+ process.exit(1);
80
+ }
81
+ }
82
+ function repl() {
83
+ console.log(BANNER);
84
+ console.log(chalk_1.default.dim(" Type Samskritam code (wrap in namaskaram...viramah)"));
85
+ console.log(chalk_1.default.dim(' Type "exit" or Ctrl+C to quit\n'));
86
+ const rl = readline.createInterface({
87
+ input: process.stdin,
88
+ output: process.stdout,
89
+ prompt: chalk_1.default.yellow("संस्कृतम् > "),
90
+ });
91
+ let buffer = "";
92
+ let multiline = false;
93
+ rl.prompt();
94
+ rl.on("line", (line) => {
95
+ const trimmed = line.trim();
96
+ if (trimmed === "exit" || trimmed === "quit") {
97
+ console.log(chalk_1.default.yellow("\nDhanyavaad! (Thank you!) 🙏\n"));
98
+ process.exit(0);
99
+ }
100
+ if (trimmed === "namaskaram") {
101
+ multiline = true;
102
+ buffer = trimmed + "\n";
103
+ process.stdout.write(chalk_1.default.dim(" ... "));
104
+ return;
105
+ }
106
+ if (multiline) {
107
+ buffer += line + "\n";
108
+ if (trimmed === "viramah") {
109
+ multiline = false;
110
+ const interpreter = new interpreter_1.Interpreter();
111
+ try {
112
+ interpreter.interpret(buffer);
113
+ console.log(chalk_1.default.green("Saphalam! 🎉"));
114
+ }
115
+ catch (error) {
116
+ if (error instanceof errors_1.SamskritamError) {
117
+ console.error(chalk_1.default.red(error.toString()));
118
+ }
119
+ else if (error instanceof Error) {
120
+ console.error(chalk_1.default.red(`Kim karoshi? ${error.message}`));
121
+ }
122
+ }
123
+ buffer = "";
124
+ rl.prompt();
125
+ }
126
+ else {
127
+ process.stdout.write(chalk_1.default.dim(" ... "));
128
+ }
129
+ return;
130
+ }
131
+ // Single-line: auto-wrap in namaskaram...viramah
132
+ if (trimmed.length > 0) {
133
+ const wrappedCode = `namaskaram\n${trimmed}\nviramah`;
134
+ const interpreter = new interpreter_1.Interpreter();
135
+ try {
136
+ interpreter.interpret(wrappedCode);
137
+ }
138
+ catch (error) {
139
+ if (error instanceof errors_1.SamskritamError) {
140
+ console.error(chalk_1.default.red(error.toString()));
141
+ }
142
+ else if (error instanceof Error) {
143
+ console.error(chalk_1.default.red(`Kim karoshi? ${error.message}`));
144
+ }
145
+ }
146
+ }
147
+ rl.prompt();
148
+ });
149
+ rl.on("close", () => {
150
+ console.log(chalk_1.default.yellow("\nDhanyavaad! (Thank you!) 🙏\n"));
151
+ process.exit(0);
152
+ });
153
+ }
154
+ function showHelp() {
155
+ console.log(BANNER);
156
+ console.log(`${chalk_1.default.bold("Usage:")}
157
+ samskritam run <file.sam> Run a Samskritam program
158
+ samskritam repl Start interactive REPL
159
+ samskritam help Show this help message
160
+ samskritam version Show version
161
+
162
+ ${chalk_1.default.bold("Examples:")}
163
+ samskritam run hello.sam
164
+ samskritam repl
165
+
166
+ ${chalk_1.default.bold("File Extension:")} .sam
167
+
168
+ ${chalk_1.default.bold("Learn more:")} https://github.com/samskritam-lang
169
+ `);
170
+ }
171
+ // ========== Main ==========
172
+ const args = process.argv.slice(2);
173
+ const command = args[0];
174
+ switch (command) {
175
+ case "run":
176
+ if (!args[1]) {
177
+ console.error(chalk_1.default.red("Kim karoshi? Please provide a file path: samskritam run <file.sam>"));
178
+ process.exit(1);
179
+ }
180
+ run(args[1]);
181
+ break;
182
+ case "repl":
183
+ repl();
184
+ break;
185
+ case "version":
186
+ case "--version":
187
+ case "-v":
188
+ console.log(`samskritam-lang v${VERSION}`);
189
+ break;
190
+ case "help":
191
+ case "--help":
192
+ case "-h":
193
+ showHelp();
194
+ break;
195
+ default:
196
+ if (command && command.endsWith(".sam")) {
197
+ // Allow `samskritam file.sam` shorthand
198
+ run(command);
199
+ }
200
+ else {
201
+ showHelp();
202
+ }
203
+ break;
204
+ }
205
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAqC;AACrC,kDAA0B;AAC1B,oDAAiD;AACjD,0CAAgD;AAEhD,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;;;QAGpB,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,OAAO;;QAEvE,eAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC;;;CAG1D,CAAC,CAAC;AAEH,SAAS,GAAG,CAAC,QAAgB;IAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAC1D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CACP,2CAA2C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,cAAc,EAAE,CAC1F,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CACnE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAE5D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC;KACrC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YAC7B,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;YACtB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC7C,CAAC;yBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;wBAClC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBACD,MAAM,GAAG,EAAE,CAAC;gBACZ,EAAE,CAAC,MAAM,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,eAAe,OAAO,WAAW,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;oBACrC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC;qBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;;;EAMnC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;EAIvB,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;;EAE7B,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC;CAC1B,CAAC,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,KAAK;QACR,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAChF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,MAAM;IAER,KAAK,MAAM;QACT,IAAI,EAAE,CAAC;QACP,MAAM;IAER,KAAK,SAAS,CAAC;IACf,KAAK,WAAW,CAAC;IACjB,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM;IAER,KAAK,MAAM,CAAC;IACZ,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,QAAQ,EAAE,CAAC;QACX,MAAM;IAER;QACE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,wCAAwC;YACxC,GAAG,CAAC,OAAO,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM;AACV,CAAC"}
@@ -0,0 +1,27 @@
1
+ export declare class SamskritamError extends Error {
2
+ line: number;
3
+ column: number;
4
+ constructor(message: string, line?: number, column?: number);
5
+ toString(): string;
6
+ }
7
+ export declare class LexerError extends SamskritamError {
8
+ constructor(message: string, line: number, column: number);
9
+ }
10
+ export declare class ParserError extends SamskritamError {
11
+ constructor(message: string, line?: number, column?: number);
12
+ }
13
+ export declare class RuntimeError extends SamskritamError {
14
+ constructor(message: string, line?: number, column?: number);
15
+ }
16
+ export declare class BreakSignal {
17
+ readonly type = "break";
18
+ }
19
+ export declare class ContinueSignal {
20
+ readonly type = "continue";
21
+ }
22
+ export declare class ReturnSignal {
23
+ readonly type = "return";
24
+ value: any;
25
+ constructor(value: any);
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU;IAOjE,QAAQ,IAAI,MAAM;CAInB;AAED,qBAAa,UAAW,SAAQ,eAAe;gBACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI1D;AAED,qBAAa,WAAY,SAAQ,eAAe;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU;CAIlE;AAED,qBAAa,YAAa,SAAQ,eAAe;gBACnC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU;CAIlE;AAGD,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;CACzB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;CAC5B;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,YAAY;IACzB,KAAK,EAAE,GAAG,CAAC;gBAEC,KAAK,EAAE,GAAG;CAGvB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReturnSignal = exports.ContinueSignal = exports.BreakSignal = exports.RuntimeError = exports.ParserError = exports.LexerError = exports.SamskritamError = void 0;
4
+ class SamskritamError extends Error {
5
+ constructor(message, line = 0, column = 0) {
6
+ super(message);
7
+ this.name = "SamskritamError";
8
+ this.line = line;
9
+ this.column = column;
10
+ }
11
+ toString() {
12
+ const location = this.line > 0 ? ` [pankti ${this.line}, stambha ${this.column}]` : "";
13
+ return `Kim karoshi?${location} ${this.message}`;
14
+ }
15
+ }
16
+ exports.SamskritamError = SamskritamError;
17
+ class LexerError extends SamskritamError {
18
+ constructor(message, line, column) {
19
+ super(message, line, column);
20
+ this.name = "LexerError";
21
+ }
22
+ }
23
+ exports.LexerError = LexerError;
24
+ class ParserError extends SamskritamError {
25
+ constructor(message, line = 0, column = 0) {
26
+ super(message, line, column);
27
+ this.name = "ParserError";
28
+ }
29
+ }
30
+ exports.ParserError = ParserError;
31
+ class RuntimeError extends SamskritamError {
32
+ constructor(message, line = 0, column = 0) {
33
+ super(message, line, column);
34
+ this.name = "RuntimeError";
35
+ }
36
+ }
37
+ exports.RuntimeError = RuntimeError;
38
+ // Control flow exceptions (not errors)
39
+ class BreakSignal {
40
+ constructor() {
41
+ this.type = "break";
42
+ }
43
+ }
44
+ exports.BreakSignal = BreakSignal;
45
+ class ContinueSignal {
46
+ constructor() {
47
+ this.type = "continue";
48
+ }
49
+ }
50
+ exports.ContinueSignal = ContinueSignal;
51
+ class ReturnSignal {
52
+ constructor(value) {
53
+ this.type = "return";
54
+ this.value = value;
55
+ }
56
+ }
57
+ exports.ReturnSignal = ReturnSignal;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAgB,SAAQ,KAAK;IAIxC,YAAY,OAAe,EAAE,OAAe,CAAC,EAAE,SAAiB,CAAC;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,eAAe,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;CACF;AAfD,0CAeC;AAED,MAAa,UAAW,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc;QACvD,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AALD,gCAKC;AAED,MAAa,WAAY,SAAQ,eAAe;IAC9C,YAAY,OAAe,EAAE,OAAe,CAAC,EAAE,SAAiB,CAAC;QAC/D,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED,MAAa,YAAa,SAAQ,eAAe;IAC/C,YAAY,OAAe,EAAE,OAAe,CAAC,EAAE,SAAiB,CAAC;QAC/D,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC;AAED,uCAAuC;AACvC,MAAa,WAAW;IAAxB;QACW,SAAI,GAAG,OAAO,CAAC;IAC1B,CAAC;CAAA;AAFD,kCAEC;AAED,MAAa,cAAc;IAA3B;QACW,SAAI,GAAG,UAAU,CAAC;IAC7B,CAAC;CAAA;AAFD,wCAEC;AAED,MAAa,YAAY;IAIvB,YAAY,KAAU;QAHb,SAAI,GAAG,QAAQ,CAAC;QAIvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAPD,oCAOC"}
@@ -0,0 +1,7 @@
1
+ export { Tokenizer, Token, TokenType, KEYWORDS, MULTI_WORD_KEYWORDS } from "./lexer";
2
+ export { Parser } from "./parser";
3
+ export * from "./parser/ast";
4
+ export { Interpreter } from "./interpreter";
5
+ export { Environment } from "./interpreter/environment";
6
+ export { SamskritamError, LexerError, ParserError, RuntimeError, } from "./errors";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,UAAU,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.RuntimeError = exports.ParserError = exports.LexerError = exports.SamskritamError = exports.Environment = exports.Interpreter = exports.Parser = exports.MULTI_WORD_KEYWORDS = exports.KEYWORDS = exports.TokenType = exports.Tokenizer = void 0;
18
+ var lexer_1 = require("./lexer");
19
+ Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return lexer_1.Tokenizer; } });
20
+ Object.defineProperty(exports, "TokenType", { enumerable: true, get: function () { return lexer_1.TokenType; } });
21
+ Object.defineProperty(exports, "KEYWORDS", { enumerable: true, get: function () { return lexer_1.KEYWORDS; } });
22
+ Object.defineProperty(exports, "MULTI_WORD_KEYWORDS", { enumerable: true, get: function () { return lexer_1.MULTI_WORD_KEYWORDS; } });
23
+ var parser_1 = require("./parser");
24
+ Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_1.Parser; } });
25
+ __exportStar(require("./parser/ast"), exports);
26
+ var interpreter_1 = require("./interpreter");
27
+ Object.defineProperty(exports, "Interpreter", { enumerable: true, get: function () { return interpreter_1.Interpreter; } });
28
+ var environment_1 = require("./interpreter/environment");
29
+ Object.defineProperty(exports, "Environment", { enumerable: true, get: function () { return environment_1.Environment; } });
30
+ var errors_1 = require("./errors");
31
+ Object.defineProperty(exports, "SamskritamError", { enumerable: true, get: function () { return errors_1.SamskritamError; } });
32
+ Object.defineProperty(exports, "LexerError", { enumerable: true, get: function () { return errors_1.LexerError; } });
33
+ Object.defineProperty(exports, "ParserError", { enumerable: true, get: function () { return errors_1.ParserError; } });
34
+ Object.defineProperty(exports, "RuntimeError", { enumerable: true, get: function () { return errors_1.RuntimeError; } });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAqF;AAA5E,kGAAA,SAAS,OAAA;AAAS,kGAAA,SAAS,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AACnE,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,+CAA6B;AAC7B,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,mCAKkB;AAJhB,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AACV,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA"}
@@ -0,0 +1,10 @@
1
+ export declare class Environment {
2
+ private variables;
3
+ private parent;
4
+ constructor(parent?: Environment | null);
5
+ declare(name: string, value: any): void;
6
+ get(name: string): any;
7
+ set(name: string, value: any): void;
8
+ createChild(): Environment;
9
+ }
10
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/interpreter/environment.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,WAAW,GAAG,IAAW;IAI7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAOvC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAYtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAcnC,WAAW,IAAI,WAAW;CAG3B"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Environment = void 0;
4
+ const errors_1 = require("../errors");
5
+ class Environment {
6
+ constructor(parent = null) {
7
+ this.variables = new Map();
8
+ this.parent = parent;
9
+ }
10
+ declare(name, value) {
11
+ if (this.variables.has(name)) {
12
+ throw new errors_1.RuntimeError(`Variable '${name}' is already declared in this scope`);
13
+ }
14
+ this.variables.set(name, value);
15
+ }
16
+ get(name) {
17
+ if (this.variables.has(name)) {
18
+ return this.variables.get(name);
19
+ }
20
+ if (this.parent) {
21
+ return this.parent.get(name);
22
+ }
23
+ throw new errors_1.RuntimeError(`Undefined variable: '${name}'`);
24
+ }
25
+ set(name, value) {
26
+ if (this.variables.has(name)) {
27
+ this.variables.set(name, value);
28
+ return;
29
+ }
30
+ if (this.parent) {
31
+ this.parent.set(name, value);
32
+ return;
33
+ }
34
+ throw new errors_1.RuntimeError(`Undefined variable: '${name}'. Use 'mana' to declare it first`);
35
+ }
36
+ createChild() {
37
+ return new Environment(this);
38
+ }
39
+ }
40
+ exports.Environment = Environment;
41
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/interpreter/environment.ts"],"names":[],"mappings":";;;AAAA,sCAAyC;AAEzC,MAAa,WAAW;IAItB,YAAY,SAA6B,IAAI;QAHrC,cAAS,GAAqB,IAAI,GAAG,EAAE,CAAC;QAI9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,KAAU;QAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,qBAAY,CAAC,aAAa,IAAI,qCAAqC,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,qBAAY,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAAU;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,qBAAY,CAAC,wBAAwB,IAAI,mCAAmC,CAAC,CAAC;IAC1F,CAAC;IAED,WAAW;QACT,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AA5CD,kCA4CC"}
@@ -0,0 +1,3 @@
1
+ export { Interpreter } from "./interpreter";
2
+ export { Environment } from "./environment";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interpreter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Environment = exports.Interpreter = void 0;
4
+ var interpreter_1 = require("./interpreter");
5
+ Object.defineProperty(exports, "Interpreter", { enumerable: true, get: function () { return interpreter_1.Interpreter; } });
6
+ var environment_1 = require("./environment");
7
+ Object.defineProperty(exports, "Environment", { enumerable: true, get: function () { return environment_1.Environment; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interpreter/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA"}
@@ -0,0 +1,26 @@
1
+ type OutputFn = (value: string) => void;
2
+ export declare class Interpreter {
3
+ private parser;
4
+ private globalEnv;
5
+ private output;
6
+ constructor(output?: OutputFn);
7
+ interpret(source: string): void;
8
+ private executeProgram;
9
+ private executeStatement;
10
+ private executePrint;
11
+ private executeVariableDeclaration;
12
+ private executeIf;
13
+ private executeWhile;
14
+ private executeBlock;
15
+ private executeFunctionDeclaration;
16
+ private executeReturn;
17
+ private evaluateExpression;
18
+ private evaluateAssignment;
19
+ private evaluateBinary;
20
+ private evaluateUnary;
21
+ private evaluateFunctionCall;
22
+ private isTruthy;
23
+ private stringify;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=interpreter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../../src/interpreter/interpreter.ts"],"names":[],"mappings":"AAiCA,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAQxC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAAW;gBAEb,MAAM,CAAC,EAAE,QAAQ;IAM7B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,cAAc;IAwCtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;CAMlB"}