@forthic/interp 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.
Files changed (51) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +50 -0
  3. package/dist/cjs/forthic/ForthicError.d.ts +19 -0
  4. package/dist/cjs/forthic/ForthicError.js +39 -0
  5. package/dist/cjs/forthic/ForthicError.js.map +1 -0
  6. package/dist/cjs/forthic/global_module/map_word.d.ts +28 -0
  7. package/dist/cjs/forthic/global_module/map_word.js +157 -0
  8. package/dist/cjs/forthic/global_module/map_word.js.map +1 -0
  9. package/dist/cjs/forthic/global_module.d.ts +167 -0
  10. package/dist/cjs/forthic/global_module.js +2434 -0
  11. package/dist/cjs/forthic/global_module.js.map +1 -0
  12. package/dist/cjs/forthic/interpreter.d.ts +70 -0
  13. package/dist/cjs/forthic/interpreter.js +386 -0
  14. package/dist/cjs/forthic/interpreter.js.map +1 -0
  15. package/dist/cjs/forthic/module.d.ts +101 -0
  16. package/dist/cjs/forthic/module.js +277 -0
  17. package/dist/cjs/forthic/module.js.map +1 -0
  18. package/dist/cjs/forthic/tokenizer.d.ts +77 -0
  19. package/dist/cjs/forthic/tokenizer.js +335 -0
  20. package/dist/cjs/forthic/tokenizer.js.map +1 -0
  21. package/dist/cjs/forthic/utils.d.ts +11 -0
  22. package/dist/cjs/forthic/utils.js +86 -0
  23. package/dist/cjs/forthic/utils.js.map +1 -0
  24. package/dist/cjs/index.d.ts +3 -0
  25. package/dist/cjs/index.js +20 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/esm/forthic/ForthicError.d.ts +19 -0
  28. package/dist/esm/forthic/ForthicError.js +39 -0
  29. package/dist/esm/forthic/ForthicError.js.map +1 -0
  30. package/dist/esm/forthic/global_module/map_word.d.ts +28 -0
  31. package/dist/esm/forthic/global_module/map_word.js +157 -0
  32. package/dist/esm/forthic/global_module/map_word.js.map +1 -0
  33. package/dist/esm/forthic/global_module.d.ts +167 -0
  34. package/dist/esm/forthic/global_module.js +2434 -0
  35. package/dist/esm/forthic/global_module.js.map +1 -0
  36. package/dist/esm/forthic/interpreter.d.ts +70 -0
  37. package/dist/esm/forthic/interpreter.js +386 -0
  38. package/dist/esm/forthic/interpreter.js.map +1 -0
  39. package/dist/esm/forthic/module.d.ts +101 -0
  40. package/dist/esm/forthic/module.js +277 -0
  41. package/dist/esm/forthic/module.js.map +1 -0
  42. package/dist/esm/forthic/tokenizer.d.ts +77 -0
  43. package/dist/esm/forthic/tokenizer.js +335 -0
  44. package/dist/esm/forthic/tokenizer.js.map +1 -0
  45. package/dist/esm/forthic/utils.d.ts +11 -0
  46. package/dist/esm/forthic/utils.js +86 -0
  47. package/dist/esm/forthic/utils.js.map +1 -0
  48. package/dist/esm/index.d.ts +3 -0
  49. package/dist/esm/index.js +20 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 2-CLAUSE LICENSE
2
+
3
+ Copyright 2024 LinkedIn Corporation.
4
+ All Rights Reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the
16
+ distribution.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # @forthic/interp
2
+
3
+ A Forthic interpreter that runs within TypeScript.
4
+
5
+ ## Description
6
+
7
+ This package provides a Forthic interpreter that allows you to execute Forthic code within your JavaScript/TypeScript projects. Forthic is a stack-based programming language inspired by Forth.
8
+
9
+ ## Installation
10
+
11
+ You can install the package using npm:
12
+
13
+ ```sh
14
+ npm install @forthic/interp
15
+ ```
16
+
17
+ Or using yarn:
18
+
19
+ ```sh
20
+ yarn add @forthic/interp
21
+ ```
22
+
23
+ ## Usage
24
+ Here's a basic example of how to use the Forthic interpreter:
25
+
26
+ ```js
27
+ import { Interpreter } from "@forthic/interp"
28
+
29
+
30
+ (async () => {
31
+ const interp = new Interpreter();
32
+ await interp.run("[1 2 3] '3 *' MAP");
33
+ const result = interp.stack_pop();
34
+ console.log("Howdy!", {result});
35
+ })();
36
+
37
+ // Output:
38
+ //
39
+ // Howdy! { result: [ 3, 6, 9 ] }
40
+ ```
41
+
42
+ ## License
43
+ This project is licensed under the BSD-2-Clause License see the [LICENSE](./LICENSE) file for details.
44
+
45
+ ## Author
46
+ Rino Jose
47
+
48
+ ## Links
49
+ - [Repository](https://github.com/linkedin/forthic/forthic-ts)
50
+ - [Issues](https://github.com/linkedin/forthic/issues)
@@ -0,0 +1,19 @@
1
+ export interface ICodeLocation {
2
+ screen_name: string;
3
+ line: number;
4
+ column: number;
5
+ start_pos: number;
6
+ end_pos: number;
7
+ }
8
+ export declare class ForthicError {
9
+ error_key: string;
10
+ title: string;
11
+ description: string;
12
+ location?: ICodeLocation;
13
+ caught_error: any;
14
+ constructor(error_key: string, title: string, description: string, location?: any);
15
+ set_caught_error(error: any): void;
16
+ get_title(): string;
17
+ get_description(): string;
18
+ get_error_stack(): this[];
19
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForthicError = void 0;
4
+ class ForthicError {
5
+ constructor(error_key, title, description, location = null) {
6
+ this.error_key = error_key;
7
+ this.title = title;
8
+ this.description = description;
9
+ this.location = location;
10
+ console.log("ForthixError", { error_key, title, description, location });
11
+ this.caught_error = null;
12
+ }
13
+ set_caught_error(error) {
14
+ this.caught_error = error;
15
+ }
16
+ get_title() {
17
+ return this.title;
18
+ }
19
+ get_description() {
20
+ return `${this.description}`;
21
+ }
22
+ get_error_stack() {
23
+ const MAX_DEPTH = 100;
24
+ let cur_error = this;
25
+ const result = [cur_error];
26
+ for (let i = 0; i < MAX_DEPTH; i++) {
27
+ if (cur_error.caught_error) {
28
+ result.push(cur_error.caught_error);
29
+ cur_error = cur_error.caught_error;
30
+ }
31
+ else {
32
+ break;
33
+ }
34
+ }
35
+ return result.reverse();
36
+ }
37
+ }
38
+ exports.ForthicError = ForthicError;
39
+ //# sourceMappingURL=ForthicError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForthicError.js","sourceRoot":"","sources":["../../../src/forthic/ForthicError.ts"],"names":[],"mappings":";;;AAQA,MAAa,YAAY;IAOvB,YACE,SAAiB,EACjB,KAAa,EACb,WAAmB,EACnB,QAAQ,GAAG,IAAI;QAEf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,KAAU;QACzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,eAAe;QACb,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,MAAM,SAAS,GAAG,GAAG,CAAC;QAEtB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACpC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;CACF;AAhDD,oCAgDC"}
@@ -0,0 +1,28 @@
1
+ import type { Interpreter } from "../interpreter";
2
+ type MapWordFlags = {
3
+ depth?: number;
4
+ interps?: number;
5
+ push_error?: boolean;
6
+ with_key?: boolean;
7
+ };
8
+ export declare class MapWord {
9
+ forthic: any;
10
+ forthic_location: any;
11
+ items: any[];
12
+ flags: MapWordFlags;
13
+ depth: number;
14
+ num_interps: number;
15
+ push_error?: boolean;
16
+ with_key?: boolean;
17
+ cur_index: number;
18
+ result: any[];
19
+ errors: any[];
20
+ is_debugging: boolean;
21
+ processing_item: boolean;
22
+ is_done: boolean;
23
+ constructor(items: any[], forthic: any, forthic_location: any, flags: MapWordFlags);
24
+ execute(interp: Interpreter): Promise<void>;
25
+ normal_execute(interp: Interpreter): Promise<void>;
26
+ map(interp: Interpreter, items: any[]): Promise<any[]>;
27
+ }
28
+ export {};
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapWord = void 0;
4
+ const interpreter_1 = require("../interpreter");
5
+ // ( items forthic -- [ ? ] )
6
+ class MapWord {
7
+ constructor(items, forthic, forthic_location, flags) {
8
+ this.forthic = forthic;
9
+ this.forthic_location = forthic_location;
10
+ this.items = items;
11
+ this.flags = flags;
12
+ // MAP flags
13
+ this.depth = flags.depth || 0;
14
+ this.num_interps = flags.interps || 1;
15
+ this.push_error = flags.push_error;
16
+ this.with_key = flags.with_key;
17
+ this.cur_index = 0;
18
+ this.result = [];
19
+ this.errors = [];
20
+ this.is_debugging = false;
21
+ this.processing_item = false;
22
+ this.is_done = false;
23
+ }
24
+ async execute(interp) {
25
+ await this.normal_execute(interp);
26
+ }
27
+ async normal_execute(interp) {
28
+ this.is_debugging = false;
29
+ const items = this.items;
30
+ if (!items || items.length === 0) {
31
+ interp.stack_push(items);
32
+ return;
33
+ }
34
+ this.result = [];
35
+ this.errors = [];
36
+ if (this.num_interps > 1) {
37
+ const group_size = Math.ceil(items.length / this.num_interps);
38
+ interp.stack_push(items);
39
+ interp.stack_push(group_size);
40
+ await interp.run("GROUPS-OF");
41
+ const groups = interp.stack_pop();
42
+ // Clone and load up interpreters
43
+ const interp_runs = [];
44
+ for (let i = 0; i < groups.length; i++) {
45
+ const group = groups[i];
46
+ const new_interp = (0, interpreter_1.dup_interpreter)(interp);
47
+ const interp_run = this.map(new_interp, group);
48
+ interp_runs.push(interp_run);
49
+ }
50
+ const run_results = await Promise.all(interp_runs);
51
+ // Gather results
52
+ let result = [];
53
+ let errors = [];
54
+ for (const res of run_results) {
55
+ result = [...result, ...res[0]];
56
+ errors = [...errors, ...res[1]];
57
+ }
58
+ this.result = result;
59
+ this.errors = errors;
60
+ }
61
+ else {
62
+ await this.map(interp, items);
63
+ }
64
+ // Return results
65
+ interp.stack_push(this.result);
66
+ if (this.push_error)
67
+ interp.stack_push(this.errors);
68
+ }
69
+ async map(interp, items) {
70
+ const forthic = this.forthic;
71
+ const forthic_location = this.forthic_location;
72
+ const self = this;
73
+ if (!items) {
74
+ interp.stack_push(items);
75
+ return;
76
+ }
77
+ // This maps the forthic over an item, storing errors if needed
78
+ async function map_value(key, value, errors) {
79
+ if (self.with_key)
80
+ interp.stack_push(key);
81
+ interp.stack_push(value);
82
+ if (self.push_error) {
83
+ let error = null;
84
+ try {
85
+ // If this runs successfully, it would have pushed the result onto the stack
86
+ await interp.run(forthic, forthic_location);
87
+ }
88
+ catch (e) {
89
+ // Since this didn't run successfully, push null onto the stack
90
+ interp.stack_push(null);
91
+ error = e;
92
+ }
93
+ errors.push(error);
94
+ }
95
+ else {
96
+ await interp.run(forthic, forthic_location);
97
+ }
98
+ return interp.stack_pop();
99
+ }
100
+ // This recursively descends a record structure
101
+ async function descend_record(record, depth, accum, errors) {
102
+ const keys = Object.keys(record);
103
+ for (let i = 0; i < keys.length; i++) {
104
+ const k = keys[i];
105
+ const item = record[k];
106
+ if (depth > 0) {
107
+ if (item instanceof Array) {
108
+ accum[k] = [];
109
+ await descend_list(item, depth - 1, accum[k], errors);
110
+ }
111
+ else {
112
+ accum[k] = {};
113
+ await descend_record(item, depth - 1, accum[k], errors);
114
+ }
115
+ }
116
+ else {
117
+ accum[k] = await map_value(k, item, errors);
118
+ }
119
+ }
120
+ return accum;
121
+ }
122
+ // This recursively descends a list
123
+ async function descend_list(items, depth, accum, errors) {
124
+ for (let i = 0; i < items.length; i++) {
125
+ const item = items[i];
126
+ if (depth > 0) {
127
+ if (item instanceof Array) {
128
+ accum.push([]);
129
+ await descend_list(item, depth - 1, accum[accum.length - 1], errors);
130
+ }
131
+ else {
132
+ accum.push({});
133
+ await descend_record(item, depth - 1, accum[accum.length - 1], errors);
134
+ }
135
+ }
136
+ else {
137
+ accum.push(await map_value(i, item, errors));
138
+ }
139
+ }
140
+ return accum;
141
+ }
142
+ const errors = [];
143
+ let result;
144
+ const depth = this.depth;
145
+ if (items instanceof Array) {
146
+ result = await descend_list(items, depth, [], errors);
147
+ }
148
+ else {
149
+ result = await descend_record(items, depth, {}, errors);
150
+ }
151
+ this.result = result;
152
+ this.errors = errors;
153
+ return [result, errors];
154
+ }
155
+ }
156
+ exports.MapWord = MapWord;
157
+ //# sourceMappingURL=map_word.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map_word.js","sourceRoot":"","sources":["../../../../src/forthic/global_module/map_word.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ import { Module, Word } from "./module";
2
+ import type { Interpreter } from "./interpreter";
3
+ export declare class GlobalModule extends Module {
4
+ module_id: string;
5
+ literal_handlers: Array<(value: any) => any>;
6
+ constructor(interp: Interpreter);
7
+ find_word(name: string): Word | null;
8
+ find_literal_word(string: string): Word | null;
9
+ to_bool(str_val: string): boolean | null;
10
+ to_int(str_val: string): number | null;
11
+ to_float(str_val: string): number | null;
12
+ to_literal_date(str_val: string): Date | null;
13
+ to_time(str_val: string): Date | null;
14
+ make_element_word(element_name: string): (interp: Interpreter) => Promise<void>;
15
+ add_element_word(element_name: string): void;
16
+ word_VARIABLES(interp: Interpreter): void;
17
+ word_bang(interp: Interpreter): void;
18
+ word_at(interp: Interpreter): void;
19
+ word_bang_at(interp: Interpreter): void;
20
+ word_INTERPRET(interp: Interpreter): Promise<void>;
21
+ word_EXPORT(interp: Interpreter): void;
22
+ word_USE_MODULES(interp: Interpreter): Promise<void>;
23
+ word_REC(interp: Interpreter): void;
24
+ word_REC_at(interp: Interpreter): void;
25
+ word_pipe_REC_at(interp: Interpreter): Promise<void>;
26
+ word_l_REC_bang(interp: Interpreter): void;
27
+ word_APPEND(interp: Interpreter): void;
28
+ word_REVERSE(interp: Interpreter): void;
29
+ word_UNIQUE(interp: Interpreter): void;
30
+ word_L_DEL(interp: Interpreter): void;
31
+ word_RELABEL(interp: Interpreter): void;
32
+ word_BY_FIELD(interp: Interpreter): void;
33
+ word_GROUP_BY_FIELD(interp: Interpreter): void;
34
+ word_GROUP_BY(interp: Interpreter): Promise<void>;
35
+ word_GROUPS_OF(interp: Interpreter): void;
36
+ word_INDEX(interp: Interpreter): Promise<void>;
37
+ word_MAP(interp: Interpreter): Promise<void>;
38
+ word_FOREACH(interp: Interpreter): Promise<void>;
39
+ word_INVERT_KEYS(interp: Interpreter): void;
40
+ word_ZIP(interp: Interpreter): void;
41
+ word_ZIP_WITH(interp: Interpreter): Promise<void>;
42
+ word_KEYS(interp: Interpreter): void;
43
+ word_VALUES(interp: Interpreter): void;
44
+ word_LENGTH(interp: Interpreter): void;
45
+ word_RANGE(interp: Interpreter): Promise<void>;
46
+ word_SLICE(interp: Interpreter): void;
47
+ word_DIFFERENCE(interp: Interpreter): void;
48
+ word_INTERSECTION(interp: Interpreter): void;
49
+ word_UNION(interp: Interpreter): void;
50
+ word_SELECT(interp: Interpreter): Promise<void>;
51
+ word_TAKE(interp: Interpreter): void;
52
+ word_DROP(interp: Interpreter): void;
53
+ word_ROTATE(interp: Interpreter): void;
54
+ word_ROTATE_ELEMENT(interp: Interpreter): void;
55
+ word_ARRAY_q(interp: Interpreter): void;
56
+ word_SHUFFLE(interp: Interpreter): void;
57
+ word_FIELD_KEY_FUNC(interp: Interpreter): void;
58
+ word_SORT(interp: Interpreter): Promise<void>;
59
+ word_NTH(interp: Interpreter): void;
60
+ word_LAST(interp: Interpreter): void;
61
+ word_UNPACK(interp: Interpreter): void;
62
+ word_FLATTEN(interp: Interpreter): void;
63
+ word_KEY_OF(interp: Interpreter): void;
64
+ word_REDUCE(interp: Interpreter): Promise<void>;
65
+ word_POP(interp: Interpreter): void;
66
+ word_DUP(interp: Interpreter): void;
67
+ word_SWAP(interp: Interpreter): void;
68
+ word_to_STR(interp: Interpreter): void;
69
+ word_CONCAT(interp: Interpreter): void;
70
+ word_SPLIT(interp: Interpreter): void;
71
+ word_JOIN(interp: Interpreter): void;
72
+ word_slash_N(interp: Interpreter): void;
73
+ word_slash_R(interp: Interpreter): void;
74
+ word_slash_T(interp: Interpreter): void;
75
+ word_LOWERCASE(interp: Interpreter): void;
76
+ word_UPPERCASE(interp: Interpreter): void;
77
+ word_ASCII(interp: Interpreter): void;
78
+ word_STRIP(interp: Interpreter): void;
79
+ word_REPLACE(interp: Interpreter): void;
80
+ word_RE_MATCH(interp: Interpreter): void;
81
+ word_RE_MATCH_ALL(interp: Interpreter): void;
82
+ word_RE_MATCH_GROUP(interp: Interpreter): void;
83
+ word_AM(interp: Interpreter): void;
84
+ word_PM(interp: Interpreter): void;
85
+ word_NOW(interp: Interpreter): void;
86
+ word_to_TIME(interp: Interpreter): void;
87
+ word_TIME_to_STR(interp: Interpreter): void;
88
+ word_to_DATE(interp: Interpreter): void;
89
+ word_TODAY(interp: Interpreter): void;
90
+ word_MONDAY(interp: Interpreter): void;
91
+ word_TUESDAY(interp: Interpreter): void;
92
+ word_WEDNESDAY(interp: Interpreter): void;
93
+ word_THURSDAY(interp: Interpreter): void;
94
+ word_FRIDAY(interp: Interpreter): void;
95
+ word_SATURDAY(interp: Interpreter): void;
96
+ word_SUNDAY(interp: Interpreter): void;
97
+ static get_day_this_week(day_of_week: any): Date;
98
+ word_ADD_DAYS(interp: Interpreter): void;
99
+ word_SUBTRACT_DATES(interp: Interpreter): void;
100
+ word_DATE_to_STR(interp: Interpreter): void;
101
+ word_DATE_to_INT(interp: Interpreter): void;
102
+ word_DATE_TIME_to_DATETIME(interp: Interpreter): void;
103
+ word_DATETIME_to_TIMESTAMP(interp: Interpreter): void;
104
+ word_TIMESTAMP_to_DATETIME(interp: Interpreter): void;
105
+ word_STR_to_DATETIME(interp: Interpreter): void;
106
+ word_STR_to_TIMESTAMP(interp: Interpreter): void;
107
+ word_DAYS_AGO(interp: Interpreter): void;
108
+ word_plus(interp: Interpreter): void;
109
+ word_times(interp: Interpreter): void;
110
+ word_divide_by(interp: Interpreter): void;
111
+ word_MOD(interp: Interpreter): void;
112
+ word_MEAN(interp: Interpreter): void;
113
+ word_MAX(interp: Interpreter): void;
114
+ word_MIN(interp: Interpreter): void;
115
+ word_ROUND(interp: Interpreter): void;
116
+ word_equal_equal(interp: Interpreter): void;
117
+ word_not_equal(interp: Interpreter): void;
118
+ word_greater_than(interp: Interpreter): void;
119
+ word_greater_than_or_equal(interp: Interpreter): void;
120
+ word_less_than(interp: Interpreter): void;
121
+ word_less_than_or_equal(interp: Interpreter): void;
122
+ word_OR(interp: Interpreter): void;
123
+ word_AND(interp: Interpreter): void;
124
+ word_NOT(interp: Interpreter): void;
125
+ word_IN(interp: Interpreter): void;
126
+ word_ANY(interp: Interpreter): void;
127
+ word_ALL(interp: Interpreter): void;
128
+ word_to_BOOL(interp: Interpreter): void;
129
+ word_to_INT(interp: Interpreter): void;
130
+ word_to_FLOAT(interp: Interpreter): void;
131
+ word_BUCKET(interp: Interpreter): void;
132
+ word_UNIFORM_RANDOM(interp: Interpreter): void;
133
+ word_RANGE_INDEX(interp: Interpreter): void;
134
+ word_RANGE_BUCKETS(interp: Interpreter): Promise<void>;
135
+ word_INFINITY(interp: Interpreter): Promise<void>;
136
+ word_bang_PUSH_ERROR(interp: Interpreter): void;
137
+ word_bang_WITH_KEY(interp: Interpreter): void;
138
+ word_bang_COMPARATOR(interp: Interpreter): void;
139
+ word_bang_PUSH_REST(interp: Interpreter): void;
140
+ word_bang_DEPTH(interp: Interpreter): void;
141
+ word_bang_OVERWRITE(interp: Interpreter): void;
142
+ word_bang_DELAY(interp: Interpreter): void;
143
+ word_bang_INTERPS(interp: Interpreter): void;
144
+ word_bang_NOTE_PROGRESS(interp: Interpreter): void;
145
+ word_URL_ENCODE(interp: Interpreter): void;
146
+ word_URL_DECODE(interp: Interpreter): void;
147
+ word_QUOTE_CHAR(interp: Interpreter): void;
148
+ word_QUOTED(interp: Interpreter): void;
149
+ word_CONSOLE_LOG(interp: Interpreter): void;
150
+ word_PROFILE_START(interp: Interpreter): void;
151
+ word_PROFILE_END(interp: Interpreter): void;
152
+ word_PROFILE_TIMESTAMP(interp: Interpreter): void;
153
+ word_PROFILE_DATA(interp: Interpreter): void;
154
+ word_NULL(interp: Interpreter): void;
155
+ word_DEFAULT(interp: Interpreter): void;
156
+ word_star_DEFAULT(interp: Interpreter): Promise<void>;
157
+ word_REC_DEFAULTS(interp: Interpreter): void;
158
+ word_l_REPEAT(interp: Interpreter): Promise<void>;
159
+ word_IDENTITY(_interp: Interpreter): Promise<void>;
160
+ word_to_FIXED(interp: Interpreter): void;
161
+ word_to_JSON(interp: Interpreter): void;
162
+ word_PRETTIFY(interp: Interpreter): void;
163
+ word_JSON_to(interp: Interpreter): void;
164
+ word_LOAD_SCREEN(interp: Interpreter): Promise<void>;
165
+ word_dot_s(interp: Interpreter): void;
166
+ word_minus(interp: Interpreter): void;
167
+ }