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.
- package/README.md +184 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +205 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/src/errors/index.d.ts +27 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +58 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +35 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interpreter/environment.d.ts +10 -0
- package/dist/src/interpreter/environment.d.ts.map +1 -0
- package/dist/src/interpreter/environment.js +41 -0
- package/dist/src/interpreter/environment.js.map +1 -0
- package/dist/src/interpreter/index.d.ts +3 -0
- package/dist/src/interpreter/index.d.ts.map +1 -0
- package/dist/src/interpreter/index.js +8 -0
- package/dist/src/interpreter/index.js.map +1 -0
- package/dist/src/interpreter/interpreter.d.ts +26 -0
- package/dist/src/interpreter/interpreter.d.ts.map +1 -0
- package/dist/src/interpreter/interpreter.js +273 -0
- package/dist/src/interpreter/interpreter.js.map +1 -0
- package/dist/src/lexer/index.d.ts +3 -0
- package/dist/src/lexer/index.d.ts.map +1 -0
- package/dist/src/lexer/index.js +10 -0
- package/dist/src/lexer/index.js.map +1 -0
- package/dist/src/lexer/tokenizer.d.ts +26 -0
- package/dist/src/lexer/tokenizer.d.ts.map +1 -0
- package/dist/src/lexer/tokenizer.js +332 -0
- package/dist/src/lexer/tokenizer.js.map +1 -0
- package/dist/src/lexer/tokens.d.ts +56 -0
- package/dist/src/lexer/tokens.d.ts.map +1 -0
- package/dist/src/lexer/tokens.js +86 -0
- package/dist/src/lexer/tokens.js.map +1 -0
- package/dist/src/parser/ast.d.ts +115 -0
- package/dist/src/parser/ast.d.ts.map +1 -0
- package/dist/src/parser/ast.js +4 -0
- package/dist/src/parser/ast.js.map +1 -0
- package/dist/src/parser/index.d.ts +3 -0
- package/dist/src/parser/index.d.ts.map +1 -0
- package/dist/src/parser/index.js +21 -0
- package/dist/src/parser/index.js.map +1 -0
- package/dist/src/parser/parser.d.ts +38 -0
- package/dist/src/parser/parser.d.ts.map +1 -0
- package/dist/src/parser/parser.js +417 -0
- package/dist/src/parser/parser.js.map +1 -0
- package/examples/fibonacci.sam +21 -0
- package/examples/fizzbuzz.sam +21 -0
- package/examples/functions.sam +49 -0
- package/examples/hello.sam +8 -0
- package/examples/loops.sam +37 -0
- package/examples/variables.sam +23 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|