septima-lang 0.0.1 → 0.0.2

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.
@@ -1 +1 @@
1
- export * from './cdl';
1
+ export * from './septima';
package/dist/src/index.js CHANGED
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./cdl"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFxQiJ9
17
+ __exportStar(require("./septima"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUF5QiJ9
@@ -3,25 +3,25 @@ import { Result, ResultSink } from './result';
3
3
  import { Verbosity } from './runtime';
4
4
  interface Options {
5
5
  /**
6
- * A callback function to be invoked when the CDL program evaluated to `sink`. Allows the caller to determine which
7
- * value will be returned in that case. For instance, passing `() => undefined` will translate a `sink` value to
8
- * `undefined`. The default behavior is to throw an error.
6
+ * A callback function to be invoked when the Septima program evaluated to `sink`. Allows the caller to determine
7
+ * which value will be returned in that case. For instance, passing `() => undefined` will translate a `sink` value
8
+ * to `undefined`. The default behavior is to throw an error.
9
9
  */
10
10
  onSink?: (res: ResultSink) => unknown;
11
11
  }
12
- export declare class Cdl {
12
+ export declare class Septima {
13
13
  readonly input: string;
14
14
  private readonly scanner;
15
15
  private readonly sourceCode;
16
16
  private readonly parser;
17
17
  /**
18
- * Runs a CDL program and returns the value it evaluates to. If it evaluates to `sink`, returns the value computed
18
+ * Runs a Septima program and returns the value it evaluates to. If it evaluates to `sink`, returns the value computed
19
19
  * by `options.onSink()` - if present, or throws an error - otherwise.
20
20
  *
21
- * This method is the simplest way to evaluate a CDL program. One can also use `.compute()` to get a higher degree
22
- * of details about the result.
21
+ * This method is the simplest way to evaluate a Septima program, and it fits many common use cases. One can also use
22
+ * `.compute()` to get additional details about the execution.
23
23
  *
24
- * @param input the source code of the CDL program
24
+ * @param input the source code of the Septima program
25
25
  * @param options
26
26
  * @returns the value that `input` evaluates to
27
27
  */
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parse = exports.Septima = void 0;
4
+ const parser_1 = require("./parser");
5
+ const result_1 = require("./result");
6
+ const runtime_1 = require("./runtime");
7
+ const scanner_1 = require("./scanner");
8
+ const should_never_happen_1 = require("./should-never-happen");
9
+ const source_code_1 = require("./source-code");
10
+ class Septima {
11
+ constructor(input) {
12
+ this.input = input;
13
+ this.sourceCode = new source_code_1.SourceCode(this.input);
14
+ this.scanner = new scanner_1.Scanner(this.sourceCode);
15
+ this.parser = new parser_1.Parser(this.scanner);
16
+ }
17
+ /**
18
+ * Runs a Septima program and returns the value it evaluates to. If it evaluates to `sink`, returns the value computed
19
+ * by `options.onSink()` - if present, or throws an error - otherwise.
20
+ *
21
+ * This method is the simplest way to evaluate a Septima program, and it fits many common use cases. One can also use
22
+ * `.compute()` to get additional details about the execution.
23
+ *
24
+ * @param input the source code of the Septima program
25
+ * @param options
26
+ * @returns the value that `input` evaluates to
27
+ */
28
+ static run(input, options) {
29
+ const onSink = options?.onSink ??
30
+ ((r) => {
31
+ throw new Error(r.message);
32
+ });
33
+ const res = new Septima(input).compute();
34
+ if (res.tag === 'ok') {
35
+ return res.value;
36
+ }
37
+ if (res.tag === 'sink') {
38
+ return onSink(res);
39
+ }
40
+ (0, should_never_happen_1.shouldNeverHappen)(res);
41
+ }
42
+ compute(verbosity = 'quiet') {
43
+ const ast = parse(this.parser);
44
+ const runtime = new runtime_1.Runtime(ast, verbosity, this.parser);
45
+ const c = runtime.compute();
46
+ if (c.value) {
47
+ if (!c.value.isSink()) {
48
+ return { value: c.value.export(), tag: 'ok' };
49
+ }
50
+ return new result_1.ResultSinkImpl(c.value, this.sourceCode);
51
+ }
52
+ const runtimeErrorMessage = `${c.errorMessage} when evaluating:\n${this.sourceCode.formatTrace(c.expressionTrace)}`;
53
+ throw new Error(runtimeErrorMessage);
54
+ }
55
+ }
56
+ exports.Septima = Septima;
57
+ function parse(arg) {
58
+ const parser = typeof arg === 'string' ? new parser_1.Parser(new scanner_1.Scanner(new source_code_1.SourceCode(arg))) : arg;
59
+ const ast = parser.parse();
60
+ return ast;
61
+ }
62
+ exports.parse = parse;
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwdGltYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXB0aW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFpQztBQUNqQyxxQ0FBNkQ7QUFDN0QsdUNBQThDO0FBQzlDLHVDQUFtQztBQUNuQywrREFBeUQ7QUFDekQsK0NBQTBDO0FBVzFDLE1BQWEsT0FBTztJQWtDbEIsWUFBcUIsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBakNEOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQWEsRUFBRSxPQUFpQjtRQUN6QyxNQUFNLE1BQU0sR0FDVixPQUFPLEVBQUUsTUFBTTtZQUNmLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDNUIsQ0FBQyxDQUFDLENBQUE7UUFDSixNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUN4QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQTtTQUNqQjtRQUVELElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDbkI7UUFFRCxJQUFBLHVDQUFpQixFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFRRCxPQUFPLENBQUMsWUFBdUIsT0FBTztRQUNwQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUE7YUFDOUM7WUFDRCxPQUFPLElBQUksdUJBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtTQUNwRDtRQUVELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsWUFBWSxzQkFBc0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUE7UUFDbkgsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRjtBQXZERCwwQkF1REM7QUFFRCxTQUFnQixLQUFLLENBQUMsR0FBb0I7SUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQU0sQ0FBQyxJQUFJLGlCQUFPLENBQUMsSUFBSSx3QkFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO0lBQzNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUMxQixPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUM7QUFKRCxzQkFJQyJ9
@@ -1,39 +1,16 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  Object.defineProperty(exports, "__esModule", { value: true });
26
3
  const ast_node_1 = require("../src/ast-node");
27
- const cdl = __importStar(require("../src/cdl"));
4
+ const septima_1 = require("../src/septima");
28
5
  describe('parser', () => {
29
6
  test('show()', () => {
30
- expect((0, ast_node_1.show)(cdl.parse(`5`))).toEqual('5');
31
- expect((0, ast_node_1.show)(cdl.parse(`fun (x) x*9`))).toEqual('fun (x) (x * 9)');
7
+ expect((0, ast_node_1.show)((0, septima_1.parse)(`5`))).toEqual('5');
8
+ expect((0, ast_node_1.show)((0, septima_1.parse)(`fun (x) x*9`))).toEqual('fun (x) (x * 9)');
32
9
  });
33
10
  test('syntax errors', () => {
34
- expect(() => cdl.parse(`a + #$%x`)).toThrowError('Unparsable input at (1:5..8) #$%x');
35
- expect(() => cdl.parse(`{#$%x: 8}`)).toThrowError('Expected an identifier at (1:2..9) #$%x: 8}');
36
- expect(() => cdl.parse(`"foo" "goo"`)).toThrowError('Loitering input at (1:7..11) "goo"');
11
+ expect(() => (0, septima_1.parse)(`a + #$%x`)).toThrowError('Unparsable input at (1:5..8) #$%x');
12
+ expect(() => (0, septima_1.parse)(`{#$%x: 8}`)).toThrowError('Expected an identifier at (1:2..9) #$%x: 8}');
13
+ expect(() => (0, septima_1.parse)(`"foo" "goo"`)).toThrowError('Loitering input at (1:7..11) "goo"');
37
14
  });
38
15
  });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy9wYXJzZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQXNDO0FBQ3RDLGdEQUFpQztBQUVqQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNsQixNQUFNLENBQUMsSUFBQSxlQUFJLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sQ0FBQyxJQUFBLGVBQUksRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDckYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtRQUNoRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFBO0lBQzNGLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy9wYXJzZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUFzQztBQUN0Qyw0Q0FBc0M7QUFFdEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDbEIsTUFBTSxDQUFDLElBQUEsZUFBSSxFQUFDLElBQUEsZUFBSyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLElBQUEsZUFBSSxFQUFDLElBQUEsZUFBSyxFQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUMvRCxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGVBQUssRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGVBQUssRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGVBQUssRUFBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFBO0lBQ3ZGLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
File without changes