@fraczak/k 3.1.0 → 4.0.1

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/BIG_PICTURE.md CHANGED
@@ -1,3 +1,4 @@
1
+ # Big Picture
1
2
 
2
3
  `Kernel-code` is an experiment aiming to define a "perfect programming language".
3
4
 
@@ -22,7 +23,7 @@ Types are defined by two constructs:
22
23
  1. Product
23
24
  2. Union (also called tagged or disjoint union)
24
25
 
25
- Given a set (possibly empty) of types `t1, t2, ..., tn` and a set of pairwise different tags (labels) `l1, l2, ..., ln`,
26
+ Given a finite (possibly empty) set of types `t1, t2, ..., tn` and a set of pairwise different tags (labels) `l1, l2, ..., ln`,
26
27
 
27
28
  - by `{ t1 l1, t2 l2, ..., tn ln }`, we define a _product type_ with exactly `n` projection functions `.l1`, `.l2`, `...`, `.ln`,
28
29
  mapping a value of type `{t1 l1, t2 l2, ..., tn ln}` into a value of type `t1`, `t2`, `...`, `tn`, respectively.
@@ -42,7 +43,6 @@ Some properties of these types:
42
43
  as a union type value (a variant).
43
44
  2. The empty product type `{}` has a single value, called the _unit_ and also denoted by `{}`, which has no fields.
44
45
  3. The empty union type `<>` has no values.
45
- 4. The product and union types form dual categories.
46
46
 
47
47
  ### Partial functions
48
48
 
@@ -64,7 +64,7 @@ empty composition, `()`, defines the identity function.
64
64
 
65
65
  ### Program
66
66
 
67
- A `kernel-core` program is a set of definitions of types and partial functions followed by an _expression_,
67
+ A `kernel-core` program is a set of definitions of types and partial functions, followed by an _expression_,
68
68
  which is the partial function the program defines.
69
69
 
70
70
  The language syntax is defined by:
@@ -97,7 +97,7 @@ The `typing` expression acts as a type annotation and can be seen as a 'filter',
97
97
  function defined only for the values of the corresponding type.
98
98
 
99
99
  That's it.
100
- No `int`, no `if` statement, no `loop`, no `throw`, no _closure_, no _annotations_, and no macros.
100
+ No `builtin` types, no `if` statement, no `loop`, no `throw`, no _closure_, no _annotations_, and no macros.
101
101
  Just types and partial functions.
102
102
 
103
103
  ### Normalization
@@ -170,50 +170,59 @@ Functions `bit0`, `bit1`, and `zero` are "constant polymorphic functions", meani
170
170
 
171
171
  - constant: if defined, they always return exactly the same value;
172
172
  - polymorphic: they are defined for more than one pair of input and output type: functions
173
- `bit0` and `bit1` are of type `X -> bit`, and `zero` is of type `X -> byte`, where `X`
174
- denotes an unconstrained type pattern.
173
+ `bit0` and `bit1` are of type `?X -> $bit`, and `zero` is of type `?X -> $byte`, where `?X`
174
+ denotes an unconstrained type pattern, also denoted as `?(...)`.
175
175
 
176
176
  Functions `inc` and `inc3` are (non-polymorphic) functions of types
177
- `byte -> { bit overflown, byte byte }` and
178
- `{ bit overflown, byte byte } -> { bit overflown, byte byte }`, respectively.
177
+ `$byte -> ${ bit overflown, byte byte }` and
178
+ `${ bit overflown, byte byte } -> ${ bit overflown, byte byte }`, respectively.
179
179
 
180
- Function `inc_o` is a polymorphic function of type patterns: `X -> Y` with
181
- following constraints:
180
+ Function `inc_o` is a polymorphic function of type patterns: `?X -> ${ byte byte, bit overflown }`
181
+ with following constraints:
182
182
 
183
- - `X` is a product type with at least two fields: `byte` and `overflown`, denoted by:
184
- > `?{ byte byte, Z overflown, ...}`;
185
- - `Z` is a type (union or product) with field `i` denoted by:
183
+ - `?X` is a product or union type with at least two fields: `byte` and `overflown`, denoted by:
184
+ > `?( $byte byte, Z overflown, ...)`;
185
+ - `?Z` is a type (union or product) with field `i` denoted by:
186
186
  > `?( V i, ...)`;
187
- - `V` is unconstrained;
188
- - `Y` is a product type with exactly two fields: `byte` and `overflown`, denoted by:
189
- > `?{ byte byte, bit overflown }`;
187
+ - `V` is unconstrained, denoted by `(...)`;
190
188
 
191
- The type pattern for `Y` is _singleton_, as only one type fits the pattern,
192
- whereas the other type patterns are not.
189
+ We could write it as: `?($byte byte, ((...) i, ...) overflown, ...)`.
193
190
 
194
- In this example, we were able to find the most general type pattern for all sub-expressions of the program.
195
- However, we still do not have a way to find the most general type patterns in the general case.
196
- This is work in progress.
191
+ The target type `${ byte byte, bit overflown }` was derived from pattern `?{ $byte byte, $bit overflown }`.
192
+ Such a pettern is called _singleton pattern_ as only one type fits the pattern.
197
193
 
198
194
  ## Universal Schema Registry
199
195
 
200
- Since the normalization process for types is fast and deterministic, we can build a universal schema registry that will store all invented types.
201
- The registry will be a key-value store, where the key is the hash of the normalized type, and the value is the normalized type itself.
196
+ Since the normalization process for types is fast and deterministic, we can build a universal
197
+ schema registry that will store all invented types.
198
+ The registry will be a key-value store, where the key is the hash of the normalized type,
199
+ and the value is the normalized type itself.
202
200
 
203
- All functions (non-polymorphic and polymorphic) will be renamed by the hash of their normalized definition and stored in the similar key-value store.
201
+ All functions (non-polymorphic and polymorphic) will be renamed by the hash of their normalized
202
+ definition and stored in the similar key-value store.
204
203
 
205
- Non-polymorphic functions can be easily indexed by the hashes of their input and output types so that we can quickly find the function we need, e.g., for autocomplition.
206
- Searching for polymorphic functions is more complicated, as we need to find the function whose input and output type patterns fit given types.
204
+ Non-polymorphic functions can be easily indexed by the hashes of their input and output types
205
+ so that we can quickly find the function we need.
206
+ Searching for polymorphic functions is more complicated, as we need to find the function
207
+ whose input and output type patterns fit given types.
207
208
 
208
209
  ## Serialization and Compilation
209
210
 
210
- The language is designed to transform _codes_, i.e., serialized typed values, i.e., trees accepted by a tree automaton, into other _codes_.
211
+ The language is designed to transform _codes_, i.e., serialized typed values, i.e., trees
212
+ accepted by a tree automaton, into other _codes_.
211
213
  The transformation is done by partial functions as defined in the language.
212
- The non-recursive and tail-recursive (and even some non-tail recursive) functions can be compiled into deterministic finite (pushdown) transducers.
214
+ The non-recursive and tail-recursive (and even some non-tail recursive) functions can
215
+ be compiled into deterministic finite (pushdown) transducers.
213
216
 
214
217
  ### AND-OR graphs for enconding and decoding codes
215
218
 
219
+ This could be generic and compact way to encode and decode typed values.
220
+ The idea is to use _prefix codes_ (a class of languages such that no word is a prefix of
221
+ another word) to encode the values.
216
222
 
223
+ ### RUST data structures
224
+
225
+ A type can be translated into a Rust data structure, and a function can be translated into a Rust function.
217
226
 
218
227
  ## Linking with Other Languages
219
228
 
@@ -16,7 +16,4 @@ t("$int [ $int true, false ] .0", (annotated) => {
16
16
  });
17
17
 
18
18
  assert.throws(() => t(`$int [ $int true, 12 ]`), /Error/);
19
- console.log("The both errors are expected...");
20
19
  console.log("OK");
21
-
22
- // t(`[]`);
package/Filters/bug.k ADDED
@@ -0,0 +1,3 @@
1
+ swap = ?{<...> x, Y y} {.x y, .y x} .y ?Y;
2
+
3
+ {"asd" x, "a" y} swap .asd
@@ -0,0 +1,15 @@
1
+ remap = ?T {.x y} ?T ?<X z, ...>;
2
+ swap = ?T {.x y, .y x} ?T;
3
+
4
+ $t = <int x, int y>;
5
+
6
+ $t2 = <int x, int y, int z>;
7
+
8
+ -- {12 x} $t remap $t
9
+ -- {[1,2] x} remap
10
+ -- {"ala" x, 3 y} swap
11
+
12
+ {
13
+ {12 x} $t2 remap $t2 remap,
14
+ {"ala" x, "ola" y} swap
15
+ }
@@ -0,0 +1,9 @@
1
+ f1 = ?{T x, [T] y};
2
+ f2 = ?{[R] x, R y};
3
+
4
+ swap = f1 f2 {.x y, .y x};
5
+
6
+
7
+ {[] x, [[[[]]]] y} swap
8
+
9
+ -- shoud_work
package/README.md CHANGED
@@ -87,7 +87,7 @@ supported.
87
87
 
88
88
  ### Basic extensions
89
89
 
90
- #### Constants, i.e., literals for `strings`, `integers`, `booleans`, and `null`
90
+ #### Constants, i.e., literals for `string`, `int`, `bool`, and `null`
91
91
 
92
92
  A constant defines a function which ignores its argument and produces
93
93
  the constant value. E.g.:
@@ -95,7 +95,7 @@ the constant value. E.g.:
95
95
  {123 int, "kScript" str, true bool, null null} :
96
96
  "any" --> {"int":123,"str":"kScript","bool":true,"null":null}
97
97
 
98
- Those values, i.e., `strings`, `integers`, `booleans`, and `null`, admit the
98
+ Those values, i.e., _strings_, _integers_, _booleans_, and _null_, admit the
99
99
  projection to the canonicat string representation of the value, e.g.:
100
100
 
101
101
  .2 :
@@ -176,19 +176,19 @@ is not supported in _code derivation_ (explained below).
176
176
  "2.12" --> 2.12
177
177
  "[1,2.11,0.3e-32]" --> [1,2.11,3e-33]
178
178
 
179
-
180
179
  - other predefined parial functions are: `DIV`, `FDIV`, `CONS`,
181
- `SNOC`, `toDateMsec`, `toDateStr`, and `_log!`.
180
+ `SNOC`, `toVEC`, `toDateMsec`, `toDateStr`, and `_log!`.
182
181
 
183
182
  ---
184
183
 
185
184
  ### Function and code (i.e., _type_) definitions
186
185
 
187
186
  dec = [(),-1] PLUS;
188
- max = <SNOC [.0, .1 max] <GT.0, .1>, .0> ;
187
+ max = <SNOC [.car, .cdr max] <GT.0, .1>, .0> ;
189
188
  factorial = < [(),0] GT .0 [dec factorial, ()] TIMES, 1 >;
190
189
 
191
- ### Codes (schemas, i.e., _non-functional types_)
190
+ ### Codes (schemas, i.e., _types_)
191
+
192
192
  _Codes_ (prefixed by `$`) can be defined by tagged union and product. E.g.:
193
193
 
194
194
 
@@ -256,12 +256,15 @@ fail, indicating that the script is invalid. In some other cases the
256
256
  code derivation can succeed even to the point of reducig every pattern
257
257
  to a single code making the program fully annotated by codes.
258
258
 
259
- For now, `code derivation` is supported by the core language, i.e., `composition`,
260
- `projection` and `union` with product and tagged union types.
259
+ The language `k` supports _type patterns_, which is used for type inference, however the patterns are not concidered in the evaluation of the program.
260
+
261
+ ```k
262
+ tree_pattern = ?<(...) leaf, {T left, T right} tree> = T;
263
+ ```
261
264
 
262
265
  ---
263
266
 
264
- ### List comprehension on vectors (experimental!)
267
+ ### List comprehension
265
268
 
266
269
  A vector can be "open" by PIPE (`|`) operator so the following partial function is applied to
267
270
  each element of the vector one by one, yielding another open value. An open value can be "closed",
@@ -355,11 +358,11 @@ times value `x` appears in the list. (see `Examples/list-comprehension.k` for a
355
358
  Another example could be finding the biggest (max) value in a vector:
356
359
 
357
360
  max = <
358
- SNOC # [x0, x1, x2, ...] --> [x0, [x1, x2, ...]]
359
- [.0, .1 max] # [x0, [x1, x2, ...]] --> [x0, max(x1,x2,...)], i.e., recursive call
360
- <GT .0, .1> # if x0 > max(x1,x2,...) then x0 else max(x1,x2,...)
361
- , # when SNOC is not defined, i.e., if the input vector has one element:
362
- .0 # [x0] --> x0
361
+ SNOC # [x0, x1, x2, ...] --> {x0 car, [x1, x2, ...] cdr}
362
+ [.car, .cdr max] # [x0, [x1, x2, ...]] --> [x0, max(x1,x2,...)], i.e., recursive call
363
+ <GT .0, .1> # if x0 > max(x1,x2,...) then x0 else max(x1,x2,...)
364
+ , # when SNOC is not defined, i.e., if the input vector has one element:
365
+ .0 # [x0] --> x0
363
366
  >;
364
367
  max
365
368
 
@@ -468,10 +471,10 @@ For example:
468
471
 
469
472
  1.
470
473
  curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | jq '.'
471
- curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | k '()' -1
474
+ curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | k '()' -1
472
475
  2.
473
476
  curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | jq '.[0]'
474
- curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | k '.0' -1
477
+ curl 'https://api.github.com/repositories/5101141/commits?per_page=5' | k '.0' -1
475
478
  3.
476
479
  jq '.[0] | {message: .commit.message, name: .commit.committer.name}'
477
480
  k '.0 {.commit.message message, .commit.committer.name name}' -1
package/TYPING.md CHANGED
@@ -334,9 +334,9 @@ The binary reduce function is defined as follows (it is commutative):
334
334
 
335
335
  | f-unify | (...) | {...} | <...> | () | [] | {} | <> | type
336
336
  |----------|-------|-------|-------|------|------|------|------|------
337
- |**type** | type | type | type | type | type | type | type | type
338
- |**<>** | <> | ERROR | <> | <> | ERROR| ERROR| <>
339
- |**{}** | {} | {} | ERROR | {} | [] | {}
337
+ |**type** | type | type | type | type | type | type | type
338
+ |**<>** | <> | ERROR | <> | <> | ERROR| ERROR| <>
339
+ |**{}** | {} | {} | ERROR | {} | ERROR| {}
340
340
  |**[]** | [] | [] | ERROR | [] | []
341
341
  |**()** | () | {} | <> | ()
342
342
  |**<...>** | <...> | ERROR | <...>
@@ -353,16 +353,13 @@ A comment explaining how the node was created is added as well.
353
353
 
354
354
  As the name indicates, adds an edge which can lead to many nodes.
355
355
 
356
-
357
-
358
-
359
356
  Repeat the procedure until the type pattern graph is not changing anymore.
360
357
 
361
- # TODO:
358
+ ## TODO:
362
359
 
363
360
  - [X] Redefine built-in CONS and SNOC to allign with no support for non-homogeneous lists
364
- - [ ] Introduce a bound for typing
365
- - [ ] Check for loops, e.g., `$x = < x f, ...>`, `$x = [x]`, `$x = {x f, ...}` -- this
361
+ - [X] Integrate filters into typePatters (execution is not affected)
362
+ - [/] better type error repporting - the info exists in the pattern parent tree ... in progress
363
+ - [ ] Introduce a space/time bounds for type derivation
364
+ - [ ] Check for loops, e.g., `$x = < x f, ...>`, `$x = [x]`, `$x = {x f, ...}` -- this
366
365
  looks a little arbitrary, but maybe this is actually an important part
367
- - [ ] Integrate filters into typePatters (executions?)
368
- - [ ] better error repporting - the info exists in the pattern parent tree
package/codes.mjs CHANGED
@@ -202,8 +202,8 @@ function register(newCodes) {
202
202
 
203
203
  function find(codeName) {
204
204
  if (isBuiltIn(codeName))
205
- return {code: codeName, def: "built-in["+codeName+"]"};
206
- return JSON.parse(JSON.stringify(theRepository.codes[codeName]));
205
+ return {code: codeName, def: "builtin"};
206
+ return JSON.parse(JSON.stringify(theRepository.codes[codeName] || {code: "undefined"}));
207
207
  };
208
208
 
209
209
  export default { minimize, normalize, normalizeAll, encodeCodeToString, finalize, unitCode, register, find };
package/index.mjs CHANGED
@@ -7,7 +7,7 @@ function compile(script) {
7
7
  try {
8
8
  run.defs = annotate(script);
9
9
  } catch (e) {
10
- console.error(e);
10
+ console.error(e.message);
11
11
  console.error("WARN: Recompiling without type reconciliation due to the type error above.");
12
12
  const { defs, exp } = parse(script);
13
13
  const { codes, representatives } = t.finalize(defs.codes);
@@ -30,13 +30,14 @@ runScriptOnData.doc = "Run 'script' (string) on 'data': (script,data) -> data";
30
30
 
31
31
  function annotate(script) {
32
32
  const { defs, exp } = parse(script);
33
- const { codes, representatives } = t.finalize(defs.codes);
33
+ //const { codes, representatives } = t.finalize(defs.codes);
34
34
 
35
+ const representatives = t.register(defs.codes);
35
36
  const rels = {...defs.rels, "__main__": {def: exp}};
36
37
 
37
- const pats = patterns(codes, representatives, rels);
38
+ patterns(representatives, rels);
38
39
 
39
- return {rels,codes,representatives, ...pats}
40
+ return {rels, representatives}
40
41
  }
41
42
  annotate.doc = "Annotate all the script expressions with patterns";
42
43
 
package/k.mjs CHANGED
@@ -1,5 +1,4 @@
1
- #!/usr/bin/node --stack-size=8000
2
- // #!/usr/bin/env node
1
+ #!/usr/bin/env node
3
2
  // !/usr/bin/node --stack-size=8000
4
3
 
5
4
  import fs from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fraczak/k",
3
- "version": "3.1.0",
3
+ "version": "4.0.1",
4
4
  "description": "k-language for JSON-like data transformation",
5
5
  "main": "index.mjs",
6
6
  "scripts": {
package/parser.jison CHANGED
@@ -147,15 +147,19 @@ code_label
147
147
  | int col code { $$ = {label: $1.value, code: $3}; }
148
148
  ;
149
149
 
150
- filter
151
- : name { $$ = { type: "name", name: $1.value, start: $1.start, end: $1.end}; }
152
- | dollar code { $$ = { type: "code", code: s.as_ref($2), start: $1.start, end: $2.end}; }
153
- | lp labelled_filters rp { $$ = { open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
150
+ filter_
151
+ : dollar code { $$ = { type: "code", code: s.as_ref($2), start: $1.start, end: $2.end}; }
152
+ | lp labelled_filters rp { $$ = { type: null, open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
154
153
  | la labelled_filters ra { $$ = { type: "union", open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
155
154
  | lc labelled_filters rc { $$ = { type: "product", open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
156
155
  | lb filter rb { $$ = { type: "vector", vector: $2, start: $1.start, end: $3.end }; }
157
156
  ;
158
157
 
158
+ filter
159
+ : filter_ { $$ = $1; }
160
+ | filter_ EQ name { $$ = { name: $3.value, ...$1, start: $1.start, end: $3.end }; }
161
+ | name { $$ = { type: 'name', name: $1.value, open: true, start: $1.start, end: $1.end}; }
162
+ ;
159
163
  labelled_filters
160
164
  : { $$ = { fields: {}}; }
161
165
  | non_empty_labelled_filters { $$ = $1.reduce((r, lc) => {
package/parser.mjs CHANGED
@@ -111,12 +111,12 @@ function fromEscString(escString) {
111
111
 
112
112
 
113
113
  var parser = (function(){
114
- var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[4,6,8,10,12,14,16,30,38,40,61],$V1=[1,10],$V2=[1,25],$V3=[1,26],$V4=[1,23],$V5=[1,21],$V6=[1,22],$V7=[1,24],$V8=[1,27],$V9=[1,11],$Va=[1,28],$Vb=[1,20],$Vc=[1,31],$Vd=[4,6,8,10,12,14,16,30,38,40,47,58,61],$Ve=[2,65],$Vf=[1,35],$Vg=[4,6,8,10,12,14,16,18,20,22,24,30,32,34,38,40,47,58,61],$Vh=[2,86],$Vi=[1,55],$Vj=[2,68],$Vk=[2,69],$Vl=[4,6,8,10,12,14,16,18,20,22,24,30,32,34,36,38,40,47,58,61],$Vm=[4,6,8],$Vn=[2,27],$Vo=[2,32],$Vp=[1,79],$Vq=[1,81],$Vr=[20,32],$Vs=[4,6,8,10,12,14,16,30,38,40,58,61],$Vt=[1,86],$Vu=[1,90],$Vv=[18,22,32],$Vw=[1,93],$Vx=[2,42],$Vy=[2,48],$Vz=[1,104],$VA=[18,20,32],$VB=[2,80],$VC=[2,81],$VD=[2,82],$VE=[18,20,24,32];
114
+ var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[4,6,8,10,12,14,16,30,38,40,62],$V1=[1,10],$V2=[1,25],$V3=[1,26],$V4=[1,23],$V5=[1,21],$V6=[1,22],$V7=[1,24],$V8=[1,27],$V9=[1,11],$Va=[1,28],$Vb=[1,20],$Vc=[1,31],$Vd=[4,6,8,10,12,14,16,30,38,40,47,59,62],$Ve=[2,67],$Vf=[1,35],$Vg=[4,6,8,10,12,14,16,18,20,22,24,30,32,34,38,40,47,59,62],$Vh=[2,88],$Vi=[1,55],$Vj=[2,70],$Vk=[2,71],$Vl=[4,6,8,10,12,14,16,18,20,22,24,30,32,34,36,38,40,47,59,62],$Vm=[4,6,8],$Vn=[2,27],$Vo=[4,6,8,10,12,14,16,18,20,22,24,26,30,32,34,38,40,47,59,62],$Vp=[2,32],$Vq=[1,80],$Vr=[1,82],$Vs=[20,32],$Vt=[4,6,8,10,12,14,16,30,38,40,59,62],$Vu=[1,87],$Vv=[1,91],$Vw=[18,22,32],$Vx=[1,94],$Vy=[2,49],$Vz=[2,50],$VA=[1,106],$VB=[18,20,32],$VC=[2,82],$VD=[2,83],$VE=[2,84],$VF=[18,20,24,32];
115
115
  var parser = {trace: function trace () { },
116
116
  yy: {},
117
- symbols_: {"error":2,"name":3,"NAME":4,"str":5,"STRING":6,"int":7,"INT":8,"la":9,"LA":10,"lc":11,"LC":12,"lb":13,"LB":14,"lp":15,"LP":16,"ra":17,"RA":18,"rc":19,"RC":20,"rb":21,"RB":22,"rp":23,"RP":24,"eq":25,"EQ":26,"dots":27,"DOTS":28,"dot":29,"DOT":30,"comma":31,"COMMA":32,"sc":33,"SC":34,"col":35,"COL":36,"dollar":37,"DOLLAR":38,"qmark":39,"QMARK":40,"incremental":41,"INCREMENTAL":42,"input_with_eof":43,"initialize_symbol_table":44,"defs":45,"comp":46,"EOF":47,"codeDef":48,"code":49,"labelled_codes":50,"non_empty_labelled_codes":51,"code_label":52,"filter":53,"labelled_filters":54,"non_empty_labelled_filters":55,"filter_label":56,"exp":57,"CARET":58,"labelled":59,"list":60,"PIPE":61,"non_empty_labelled":62,"comp_label":63,"non_empty_list":64,"$accept":0,"$end":1},
118
- terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",10:"LA",12:"LC",14:"LB",16:"LP",18:"RA",20:"RC",22:"RB",24:"RP",26:"EQ",28:"DOTS",30:"DOT",32:"COMMA",34:"SC",36:"COL",38:"DOLLAR",40:"QMARK",42:"INCREMENTAL",47:"EOF",58:"CARET",61:"PIPE"},
119
- productions_: [0,[3,1],[5,1],[7,1],[9,1],[11,1],[13,1],[15,1],[17,1],[19,1],[21,1],[23,1],[25,1],[27,1],[29,1],[31,1],[33,1],[35,1],[37,1],[39,1],[41,1],[43,4],[44,0],[44,1],[45,0],[45,5],[45,6],[49,1],[49,1],[48,3],[48,3],[48,3],[50,0],[50,1],[51,1],[51,3],[52,2],[52,2],[52,2],[52,3],[52,3],[52,3],[53,1],[53,2],[53,3],[53,3],[53,3],[53,3],[54,0],[54,1],[55,1],[55,3],[56,1],[56,2],[56,2],[56,2],[56,3],[56,3],[56,3],[46,1],[46,2],[46,2],[57,3],[57,3],[57,3],[57,1],[57,2],[57,3],[57,1],[57,1],[57,2],[57,2],[57,2],[57,2],[57,2],[57,1],[59,0],[59,1],[62,1],[62,3],[63,2],[63,2],[63,2],[63,3],[63,3],[63,3],[60,0],[60,1],[64,1],[64,3]],
117
+ symbols_: {"error":2,"name":3,"NAME":4,"str":5,"STRING":6,"int":7,"INT":8,"la":9,"LA":10,"lc":11,"LC":12,"lb":13,"LB":14,"lp":15,"LP":16,"ra":17,"RA":18,"rc":19,"RC":20,"rb":21,"RB":22,"rp":23,"RP":24,"eq":25,"EQ":26,"dots":27,"DOTS":28,"dot":29,"DOT":30,"comma":31,"COMMA":32,"sc":33,"SC":34,"col":35,"COL":36,"dollar":37,"DOLLAR":38,"qmark":39,"QMARK":40,"incremental":41,"INCREMENTAL":42,"input_with_eof":43,"initialize_symbol_table":44,"defs":45,"comp":46,"EOF":47,"codeDef":48,"code":49,"labelled_codes":50,"non_empty_labelled_codes":51,"code_label":52,"filter_":53,"labelled_filters":54,"filter":55,"non_empty_labelled_filters":56,"filter_label":57,"exp":58,"CARET":59,"labelled":60,"list":61,"PIPE":62,"non_empty_labelled":63,"comp_label":64,"non_empty_list":65,"$accept":0,"$end":1},
118
+ terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",10:"LA",12:"LC",14:"LB",16:"LP",18:"RA",20:"RC",22:"RB",24:"RP",26:"EQ",28:"DOTS",30:"DOT",32:"COMMA",34:"SC",36:"COL",38:"DOLLAR",40:"QMARK",42:"INCREMENTAL",47:"EOF",59:"CARET",62:"PIPE"},
119
+ productions_: [0,[3,1],[5,1],[7,1],[9,1],[11,1],[13,1],[15,1],[17,1],[19,1],[21,1],[23,1],[25,1],[27,1],[29,1],[31,1],[33,1],[35,1],[37,1],[39,1],[41,1],[43,4],[44,0],[44,1],[45,0],[45,5],[45,6],[49,1],[49,1],[48,3],[48,3],[48,3],[50,0],[50,1],[51,1],[51,3],[52,2],[52,2],[52,2],[52,3],[52,3],[52,3],[53,2],[53,3],[53,3],[53,3],[53,3],[55,1],[55,3],[55,1],[54,0],[54,1],[56,1],[56,3],[57,1],[57,2],[57,2],[57,2],[57,3],[57,3],[57,3],[46,1],[46,2],[46,2],[58,3],[58,3],[58,3],[58,1],[58,2],[58,3],[58,1],[58,1],[58,2],[58,2],[58,2],[58,2],[58,2],[58,1],[60,0],[60,1],[63,1],[63,3],[64,2],[64,2],[64,2],[64,3],[64,3],[64,3],[61,0],[61,1],[65,1],[65,3]],
120
120
  performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
121
121
  /* this == yyval */
122
122
 
@@ -154,7 +154,7 @@ break;
154
154
  case 27:
155
155
  this.$ = { code: "ref", ref: $$[$0].value, start: $$[$0].start, end: $$[$0].end};
156
156
  break;
157
- case 28: case 59: case 77: case 87:
157
+ case 28: case 47: case 61: case 79: case 89:
158
158
  this.$ = $$[$0];
159
159
  break;
160
160
  case 29:
@@ -175,10 +175,10 @@ case 33:
175
175
  return r }
176
176
  , {});
177
177
  break;
178
- case 34: case 50: case 88:
178
+ case 34: case 52: case 90:
179
179
  this.$ = [$$[$0]];
180
180
  break;
181
- case 35: case 51: case 89:
181
+ case 35: case 53: case 91:
182
182
  this.$ = [].concat($$[$0-2],$$[$0]);
183
183
  break;
184
184
  case 36: case 37: case 38:
@@ -188,27 +188,30 @@ case 39: case 40: case 41:
188
188
  this.$ = {label: $$[$0-2].value, code: $$[$0]};
189
189
  break;
190
190
  case 42:
191
- this.$ = { type: "name", name: $$[$0].value, start: $$[$0].start, end: $$[$0].end};
191
+ this.$ = { type: "code", code: s.as_ref($$[$0]), start: $$[$0-1].start, end: $$[$0].end};
192
192
  break;
193
193
  case 43:
194
- this.$ = { type: "code", code: s.as_ref($$[$0]), start: $$[$0-1].start, end: $$[$0].end};
194
+ this.$ = { type: null, open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
195
195
  break;
196
196
  case 44:
197
- this.$ = { open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
198
- break;
199
- case 45:
200
197
  this.$ = { type: "union", open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
201
198
  break;
202
- case 46:
199
+ case 45:
203
200
  this.$ = { type: "product", open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
204
201
  break;
205
- case 47:
202
+ case 46:
206
203
  this.$ = { type: "vector", vector: $$[$0-1], start: $$[$0-2].start, end: $$[$0].end };
207
204
  break;
208
205
  case 48:
209
- this.$ = { fields: {}};
206
+ this.$ = { name: $$[$0].value, ...$$[$0-2], start: $$[$0-2].start, end: $$[$0].end };
210
207
  break;
211
208
  case 49:
209
+ this.$ = { type: 'name', name: $$[$0].value, open: true, start: $$[$0].start, end: $$[$0].end};
210
+ break;
211
+ case 50:
212
+ this.$ = { fields: {}};
213
+ break;
214
+ case 51:
212
215
  this.$ = $$[$0].reduce((r, lc) => {
213
216
  if (lc.dots) {
214
217
  r.open = true;
@@ -218,78 +221,78 @@ case 49:
218
221
  return r }
219
222
  , { fields: {} });
220
223
  break;
221
- case 52:
224
+ case 54:
222
225
  this.$ = {dots: true };
223
226
  break;
224
- case 53: case 54: case 55:
227
+ case 55: case 56: case 57:
225
228
  this.$ = {label: $$[$0].value, filter: $$[$0-1]};
226
229
  break;
227
- case 56: case 57: case 58:
230
+ case 58: case 59: case 60:
228
231
  this.$ = {label: $$[$0-2].value, filter: $$[$0]};
229
232
  break;
230
- case 60:
233
+ case 62:
231
234
  this.$ = {...comp($$[$0-1], $$[$0]), start: $$[$0-1].start, end:$$[$0].end};
232
235
  break;
233
- case 61:
236
+ case 63:
234
237
  this.$ = {op: 'caret', caret: $$[$0-1], start: $$[$0-1].start, end:$$[$0].end};
235
238
  break;
236
- case 62:
239
+ case 64:
237
240
  this.$ = {...$$[$0-1], start: $$[$0-2].start, end: $$[$0].end};
238
241
  break;
239
- case 63:
242
+ case 65:
240
243
  this.$ = {op: "vector", vector: $$[$0-1], start: $$[$0-2].start, end: $$[$0].end};
241
244
  break;
242
- case 64:
245
+ case 66:
243
246
  this.$ = {...union($$[$0-1]), start: $$[$0-2].start, end: $$[$0].end};
244
247
  break;
245
- case 65:
248
+ case 67:
246
249
  this.$ = {op: "ref", ref: $$[$0].value, start: $$[$0].start, end: $$[$0].end};
247
250
  break;
248
- case 66:
251
+ case 68:
249
252
  this.$ = {...identity, start: $$[$0-1].start, end: $$[$0].end};
250
253
  break;
251
- case 67:
254
+ case 69:
252
255
  this.$ = {...$$[$0-1], start: $$[$0-2].start, end: $$[$0].end };
253
256
  break;
254
- case 68:
257
+ case 70:
255
258
  this.$ = {op: "str", str: $$[$0].value, start: $$[$0].start, end: $$[$0].end };
256
259
  break;
257
- case 69:
260
+ case 71:
258
261
  this.$ = {op: "int", int: $$[$0].value, start: $$[$0].start, end: $$[$0].end };
259
262
  break;
260
- case 70: case 71: case 72:
263
+ case 72: case 73: case 74:
261
264
  this.$ = {op: "dot", dot: $$[$0].value, start: $$[$0-1].start, end: $$[$0].end };
262
265
  break;
263
- case 73:
266
+ case 75:
264
267
  this.$ = {op: "code", code: s.as_ref($$[$0]), start: $$[$0-1].start, end: $$[$0].end};
265
268
  break;
266
- case 74:
269
+ case 76:
267
270
  this.$ = {op: "filter", filter: $$[$0], start: $$[$0-1].start, end:$$[$0].end};
268
271
  break;
269
- case 75:
272
+ case 77:
270
273
  this.$ = {op: "pipe", start: $$[$0].start, end: $$[$0].end};
271
274
  break;
272
- case 76:
275
+ case 78:
273
276
  this.$ = {op: "product", product: []};
274
277
  break;
275
- case 78:
278
+ case 80:
276
279
  this.$ = {op: "product", product: [$$[$0]]};
277
280
  break;
278
- case 79:
281
+ case 81:
279
282
  $$[$0-2].product = [].concat($$[$0-2].product,$$[$0]); this.$ = $$[$0-2];
280
283
  break;
281
- case 80: case 81: case 82:
284
+ case 82: case 83: case 84:
282
285
  this.$ = {label: $$[$0].value, exp: $$[$0-1]};
283
286
  break;
284
- case 83: case 84: case 85:
287
+ case 85: case 86: case 87:
285
288
  this.$ = {label: $$[$0-2].value, exp: $$[$0]};
286
289
  break;
287
- case 86:
290
+ case 88:
288
291
  this.$ = [];
289
292
  break;
290
293
  }
291
294
  },
292
- table: [o($V0,[2,22],{43:1,44:2,41:3,42:[1,4]}),{1:[3]},o($V0,[2,24],{45:5}),o($V0,[2,23]),o($V0,[2,20]),{3:7,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:8,38:$V9,39:19,40:$Va,46:6,57:9,61:$Vb},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,47:[1,29],57:30,58:$Vc,61:$Vb},o($Vd,$Ve,{25:34,26:$Vf}),{3:36,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:37},o($Vg,[2,59]),o([4,6,8,10,12,14,16,18,20,22,24,26,30,32,34,36,38,40,47,58,61],[2,1]),o([4,10,12,14],[2,18]),{3:46,4:$V1,5:47,6:$V2,7:48,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,20:[2,76],29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:45,57:9,59:42,61:$Vb,62:43,63:44},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,22:$Vh,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:51,57:9,60:49,61:$Vb,64:50},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,18:$Vh,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:51,57:9,60:52,61:$Vb,64:50},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,23:53,24:$Vi,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:54,57:9,61:$Vb},o($Vg,$Vj),o($Vg,$Vk),{3:58,4:$V1,5:57,6:$V2,7:56,8:$V3},{3:60,4:$V1,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,37:61,38:$V9,53:59},o($Vg,[2,75]),o([4,6,8,10,12,14,16,20,28,30,38,40,61],[2,5]),o([4,6,8,10,12,14,16,22,30,38,40,61],[2,6]),o([4,6,8,10,12,14,16,18,28,30,38,40,61],[2,4]),o([4,6,8,10,12,14,16,24,28,30,38,40,61],[2,7]),o($Vl,[2,2]),o($Vl,[2,3]),o($Vm,[2,14]),o([4,10,12,14,16,38],[2,19]),{1:[2,21]},o($Vg,[2,60]),o($Vg,[2,61]),o($Vg,$Ve),{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:37},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:67,57:9,61:$Vb},o($V0,[2,12]),o($Vd,$Vn,{25:68,26:$Vf}),o($Vg,[2,73]),o($Vg,[2,28]),{3:73,4:$V1,5:74,6:$V2,7:75,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,20:$Vo,48:38,49:72,50:69,51:70,52:71},{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:76},{3:73,4:$V1,5:74,6:$V2,7:75,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,18:$Vo,48:38,49:72,50:77,51:70,52:71},{19:78,20:$Vp},{20:[2,77],31:80,32:$Vq},o($Vr,[2,78]),{3:82,4:$V1,5:83,6:$V2,7:84,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,57:30,58:$Vc,61:$Vb},o($Vs,$Ve,{35:85,36:$Vt}),o($Vs,$Vj,{35:87,36:$Vt}),o($Vs,$Vk,{35:88,36:$Vt}),{21:89,22:$Vu},o([18,22],[2,87],{31:91,32:$Vq}),o($Vv,[2,88],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,57:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,58:$Vc,61:$Vb}),{17:92,18:$Vw},o($Vg,[2,66]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,23:94,24:$Vi,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,57:30,58:$Vc,61:$Vb},o($Vg,[2,11]),o($Vg,[2,70]),o($Vg,[2,71]),o($Vg,[2,72]),o($Vg,[2,74]),o($Vg,$Vx),{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:95},{3:101,4:$V1,5:102,6:$V2,7:103,8:$V3,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,24:$Vy,27:99,28:$Vz,37:61,38:$V9,53:100,54:96,55:97,56:98},{3:101,4:$V1,5:102,6:$V2,7:103,8:$V3,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,18:$Vy,27:99,28:$Vz,37:61,38:$V9,53:100,54:105,55:97,56:98},{3:101,4:$V1,5:102,6:$V2,7:103,8:$V3,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,20:$Vy,27:99,28:$Vz,37:61,38:$V9,53:100,54:106,55:97,56:98},{3:60,4:$V1,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,37:61,38:$V9,53:107},o($Vg,$Vn),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,33:108,34:[1,109],37:33,38:$V9,39:19,40:$Va,57:30,58:$Vc,61:$Vb},{9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:110},{19:111,20:$Vp},o([18,20],[2,33],{31:112,32:$Vq}),o($VA,[2,34]),{3:113,4:$V1,5:114,6:$V2,7:115,8:$V3},o($Vm,$Vn,{35:116,36:$Vt}),{35:117,36:$Vt},{35:118,36:$Vt},{21:119,22:$Vu},{17:120,18:$Vw},o($Vg,[2,62]),o($Vg,[2,9]),{3:46,4:$V1,5:47,6:$V2,7:48,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:45,57:9,61:$Vb,63:121},o([4,6,8,10,12,14,16,28,30,38,40,61],[2,15]),o($Vs,$Ve,{20:$VB,32:$VB}),o($Vs,$Vj,{20:$VC,32:$VC}),o($Vs,$Vk,{20:$VD,32:$VD}),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:122,57:9,61:$Vb},o($V0,[2,17]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:123,57:9,61:$Vb},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:124,57:9,61:$Vb},o($Vg,[2,63]),o($Vg,[2,10]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:125,57:9,61:$Vb},o($Vg,[2,64]),o($Vg,[2,8]),o($Vg,[2,67]),o($Vg,[2,43]),{23:126,24:$Vi},o([18,20,24],[2,49],{31:127,32:$Vq}),o($VE,[2,50]),o($VE,[2,52]),{3:128,4:$V1,5:129,6:$V2,7:130,8:$V3},o($Vm,$Vx,{35:131,36:$Vt}),{35:132,36:$Vt},{35:133,36:$Vt},o($VE,[2,13]),{17:134,18:$Vw},{19:135,20:$Vp},{21:136,22:$Vu},o($V0,[2,25]),o($V0,[2,16]),{34:[1,137]},o($Vg,[2,29]),{3:73,4:$V1,5:74,6:$V2,7:75,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:72,52:138},o($VA,[2,36]),o($VA,[2,37]),o($VA,[2,38]),{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:139},{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:140},{3:66,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:141},o($Vg,[2,30]),o($Vg,[2,31]),o($Vr,[2,79]),o($Vr,[2,83],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,57:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,58:$Vc,61:$Vb}),o($Vr,[2,84],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,57:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,58:$Vc,61:$Vb}),o($Vr,[2,85],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,57:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,58:$Vc,61:$Vb}),o($Vv,[2,89],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,57:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,58:$Vc,61:$Vb}),o($Vg,[2,44]),{3:101,4:$V1,5:102,6:$V2,7:103,8:$V3,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,27:99,28:$Vz,37:61,38:$V9,53:100,56:142},o($VE,[2,53]),o($VE,[2,54]),o($VE,[2,55]),{3:60,4:$V1,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,37:61,38:$V9,53:143},{3:60,4:$V1,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,37:61,38:$V9,53:144},{3:60,4:$V1,9:63,10:$V4,11:64,12:$V5,13:65,14:$V6,15:62,16:$V7,37:61,38:$V9,53:145},o($Vg,[2,45]),o($Vg,[2,46]),o($Vg,[2,47]),o($V0,[2,26]),o($VA,[2,35]),o($VA,[2,39]),o($VA,[2,40]),o($VA,[2,41]),o($VE,[2,51]),o($VE,[2,56]),o($VE,[2,57]),o($VE,[2,58])],
295
+ table: [o($V0,[2,22],{43:1,44:2,41:3,42:[1,4]}),{1:[3]},o($V0,[2,24],{45:5}),o($V0,[2,23]),o($V0,[2,20]),{3:7,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:8,38:$V9,39:19,40:$Va,46:6,58:9,62:$Vb},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,47:[1,29],58:30,59:$Vc,62:$Vb},o($Vd,$Ve,{25:34,26:$Vf}),{3:36,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:37},o($Vg,[2,61]),o([4,6,8,10,12,14,16,18,20,22,24,26,30,32,34,36,38,40,47,59,62],[2,1]),o([4,10,12,14],[2,18]),{3:46,4:$V1,5:47,6:$V2,7:48,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,20:[2,78],29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:45,58:9,60:42,62:$Vb,63:43,64:44},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,22:$Vh,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:51,58:9,61:49,62:$Vb,65:50},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,18:$Vh,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:51,58:9,61:52,62:$Vb,65:50},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,23:53,24:$Vi,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:54,58:9,62:$Vb},o($Vg,$Vj),o($Vg,$Vk),{3:58,4:$V1,5:57,6:$V2,7:56,8:$V3},{3:61,4:$V1,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,37:62,38:$V9,53:60,55:59},o($Vg,[2,77]),o([4,6,8,10,12,14,16,20,28,30,38,40,62],[2,5]),o([4,6,8,10,12,14,16,22,30,38,40,62],[2,6]),o([4,6,8,10,12,14,16,18,28,30,38,40,62],[2,4]),o([4,6,8,10,12,14,16,24,28,30,38,40,62],[2,7]),o($Vl,[2,2]),o($Vl,[2,3]),o($Vm,[2,14]),o([4,10,12,14,16,38],[2,19]),{1:[2,21]},o($Vg,[2,62]),o($Vg,[2,63]),o($Vg,$Ve),{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:37},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:68,58:9,62:$Vb},o($V0,[2,12]),o($Vd,$Vn,{25:69,26:$Vf}),o($Vg,[2,75]),o($Vo,[2,28]),{3:74,4:$V1,5:75,6:$V2,7:76,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,20:$Vp,48:38,49:73,50:70,51:71,52:72},{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:77},{3:74,4:$V1,5:75,6:$V2,7:76,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,18:$Vp,48:38,49:73,50:78,51:71,52:72},{19:79,20:$Vq},{20:[2,79],31:81,32:$Vr},o($Vs,[2,80]),{3:83,4:$V1,5:84,6:$V2,7:85,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,58:30,59:$Vc,62:$Vb},o($Vt,$Ve,{35:86,36:$Vu}),o($Vt,$Vj,{35:88,36:$Vu}),o($Vt,$Vk,{35:89,36:$Vu}),{21:90,22:$Vv},o([18,22],[2,89],{31:92,32:$Vr}),o($Vw,[2,90],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,58:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,59:$Vc,62:$Vb}),{17:93,18:$Vx},o($Vg,[2,68]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,23:95,24:$Vi,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,58:30,59:$Vc,62:$Vb},o($Vo,[2,11]),o($Vg,[2,72]),o($Vg,[2,73]),o($Vg,[2,74]),o($Vg,[2,76]),o($Vg,[2,47],{26:[1,96]}),o($Vg,$Vy),{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:97},{3:103,4:$V1,5:104,6:$V2,7:105,8:$V3,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,24:$Vz,27:101,28:$VA,37:62,38:$V9,53:60,54:98,55:102,56:99,57:100},{3:103,4:$V1,5:104,6:$V2,7:105,8:$V3,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,18:$Vz,27:101,28:$VA,37:62,38:$V9,53:60,54:107,55:102,56:99,57:100},{3:103,4:$V1,5:104,6:$V2,7:105,8:$V3,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,20:$Vz,27:101,28:$VA,37:62,38:$V9,53:60,54:108,55:102,56:99,57:100},{3:61,4:$V1,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,37:62,38:$V9,53:60,55:109},o($Vo,$Vn),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,33:110,34:[1,111],37:33,38:$V9,39:19,40:$Va,58:30,59:$Vc,62:$Vb},{9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:112},{19:113,20:$Vq},o([18,20],[2,33],{31:114,32:$Vr}),o($VB,[2,34]),{3:115,4:$V1,5:116,6:$V2,7:117,8:$V3},o($Vm,$Vn,{35:118,36:$Vu}),{35:119,36:$Vu},{35:120,36:$Vu},{21:121,22:$Vv},{17:122,18:$Vx},o($Vg,[2,64]),o($Vo,[2,9]),{3:46,4:$V1,5:47,6:$V2,7:48,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:45,58:9,62:$Vb,64:123},o([4,6,8,10,12,14,16,28,30,38,40,62],[2,15]),o($Vt,$Ve,{20:$VC,32:$VC}),o($Vt,$Vj,{20:$VD,32:$VD}),o($Vt,$Vk,{20:$VE,32:$VE}),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:124,58:9,62:$Vb},o($V0,[2,17]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:125,58:9,62:$Vb},{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:126,58:9,62:$Vb},o($Vg,[2,65]),o($Vo,[2,10]),{3:32,4:$V1,5:16,6:$V2,7:17,8:$V3,9:14,10:$V4,11:12,12:$V5,13:13,14:$V6,15:15,16:$V7,29:18,30:$V8,37:33,38:$V9,39:19,40:$Va,46:127,58:9,62:$Vb},o($Vg,[2,66]),o($Vo,[2,8]),o($Vg,[2,69]),{3:128,4:$V1},o($Vo,[2,42]),{23:129,24:$Vi},o([18,20,24],[2,51],{31:130,32:$Vr}),o($VF,[2,52]),o($VF,[2,54]),{3:131,4:$V1,5:132,6:$V2,7:133,8:$V3},o($Vm,$Vy,{35:134,36:$Vu}),{35:135,36:$Vu},{35:136,36:$Vu},o($VF,[2,13]),{17:137,18:$Vx},{19:138,20:$Vq},{21:139,22:$Vv},o($V0,[2,25]),o($V0,[2,16]),{34:[1,140]},o($Vo,[2,29]),{3:74,4:$V1,5:75,6:$V2,7:76,8:$V3,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:73,52:141},o($VB,[2,36]),o($VB,[2,37]),o($VB,[2,38]),{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:142},{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:143},{3:67,4:$V1,9:41,10:$V4,11:39,12:$V5,13:40,14:$V6,48:38,49:144},o($Vo,[2,30]),o($Vo,[2,31]),o($Vs,[2,81]),o($Vs,[2,85],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,58:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,59:$Vc,62:$Vb}),o($Vs,[2,86],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,58:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,59:$Vc,62:$Vb}),o($Vs,[2,87],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,58:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,59:$Vc,62:$Vb}),o($Vw,[2,91],{11:12,13:13,9:14,15:15,5:16,7:17,29:18,39:19,58:30,3:32,37:33,4:$V1,6:$V2,8:$V3,10:$V4,12:$V5,14:$V6,16:$V7,30:$V8,38:$V9,40:$Va,59:$Vc,62:$Vb}),o($Vg,[2,48]),o($Vo,[2,43]),{3:103,4:$V1,5:104,6:$V2,7:105,8:$V3,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,27:101,28:$VA,37:62,38:$V9,53:60,55:102,57:145},o($VF,[2,55]),o($VF,[2,56]),o($VF,[2,57]),{3:61,4:$V1,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,37:62,38:$V9,53:60,55:146},{3:61,4:$V1,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,37:62,38:$V9,53:60,55:147},{3:61,4:$V1,9:64,10:$V4,11:65,12:$V5,13:66,14:$V6,15:63,16:$V7,37:62,38:$V9,53:60,55:148},o($Vo,[2,44]),o($Vo,[2,45]),o($Vo,[2,46]),o($V0,[2,26]),o($VB,[2,35]),o($VB,[2,39]),o($VB,[2,40]),o($VB,[2,41]),o($VF,[2,53]),o($VF,[2,58]),o($VF,[2,59]),o($VF,[2,60])],
293
296
  defaultActions: {29:[2,21]},
294
297
  parseError: function parseError (str, hash) {
295
298
  if (hash.recoverable) {
@@ -802,9 +805,9 @@ case 17:return 38;
802
805
  break;
803
806
  case 18:return 40;
804
807
  break;
805
- case 19:return 61;
808
+ case 19:return 62;
806
809
  break;
807
- case 20:return 58;
810
+ case 20:return 59;
808
811
  break;
809
812
  case 21:return 6;
810
813
  break;