@fraczak/k 7.2.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/DOCS/BIG_PICTURE.md +54 -7
  3. package/DOCS/CODECS.md +21 -11
  4. package/DOCS/CODEC_ARCHITECTURE.md +5 -3
  5. package/DOCS/DICTIONARY.md +13 -4
  6. package/DOCS/FILE_FORMATS.md +3 -2
  7. package/DOCS/JSON_APPROACHES_COMPARISON.md +306 -0
  8. package/DOCS/NAMED_PATTERNS.md +317 -0
  9. package/DOCS/PATTERNS.md +59 -11
  10. package/DOCS/REPL.md +13 -2
  11. package/DOCS/WEB_REPL_REQUIREMENTS.md +4 -2
  12. package/Examples/arithmetics.k +22 -17
  13. package/Examples/bnat.k +21 -11
  14. package/Examples/buda.k +37 -20
  15. package/Examples/byte.k +3 -1
  16. package/Examples/code.k +38 -39
  17. package/Examples/djson-btrie.k +414 -0
  18. package/Examples/djson-ptrie.k +663 -0
  19. package/Examples/djson.k +323 -0
  20. package/Examples/esc.k +1 -1
  21. package/Examples/karatsuba-mult.k +16 -13
  22. package/Examples/list.k +8 -4
  23. package/Examples/nat.k +17 -11
  24. package/Examples/poly.k +11 -3
  25. package/Examples/vhdl_to_k.k +43 -31
  26. package/README.md +42 -16
  27. package/browser/repl-browser.mjs +6 -0
  28. package/browser/tree-view.mjs +35 -16
  29. package/browser/vfs-data.mjs +15 -7
  30. package/codecs/README.md +2 -0
  31. package/codecs/djson-btrie.mjs +560 -0
  32. package/codecs/djson-ptrie.mjs +587 -0
  33. package/core.k +79 -115
  34. package/index.mjs +3 -0
  35. package/named-patterns.mjs +267 -0
  36. package/object.mjs +31 -3
  37. package/package.json +4 -1
  38. package/parser.jison +68 -5
  39. package/parser.mjs +111 -60
  40. package/pretty.mjs +5 -0
  41. package/repl.mjs +188 -22
  42. package/scripts/build-repl-html.mjs +68 -4
  43. package/scripts/perf-djson.mjs +1142 -0
  44. package/scripts/run-tests.mjs +5 -0
  45. package/symbol-table.mjs +20 -2
  46. package/tests/bench-djson-tries.mjs +340 -0
  47. package/tests/test-codecs.mjs +59 -16
  48. package/tests/test-named-patterns.mjs +189 -0
  49. package/tests/test-repl-html.mjs +51 -4
  50. package/tests/test-repl.mjs +190 -0
package/parser.jison CHANGED
@@ -49,9 +49,11 @@ function fromEscString(escString) {
49
49
  "<" return 'LA';
50
50
  "{" return 'LC';
51
51
  "(" return 'LP';
52
+ "[" return 'LB';
52
53
  ">" return 'RA';
53
54
  "}" return 'RC';
54
55
  ")" return 'RP';
56
+ "]" return 'RB';
55
57
  "=" return 'EQ';
56
58
  "..." return 'DOTS';
57
59
  "." return 'DOT';
@@ -71,7 +73,7 @@ function fromEscString(escString) {
71
73
  /lex
72
74
 
73
75
  %token NAME STRING
74
- %token LA LC LP RA RP RC EQ DOT COMMA SC COL AT QMARK DOTS DIV VID
76
+ %token LA LC LP LB RA RC RP RB EQ DOT COMMA SC COL AT QMARK DOTS DIV VID
75
77
  %token INCREMENTAL
76
78
  %token EOF
77
79
 
@@ -85,9 +87,11 @@ at: AT { $$ = getToken(yytext,yy,_$); };
85
87
  la: LA { $$ = getToken(yytext,yy,_$); };
86
88
  lc: LC { $$ = getToken(yytext,yy,_$); };
87
89
  lp: LP { $$ = getToken(yytext,yy,_$); };
90
+ lb: LB { $$ = getToken(yytext,yy,_$); };
88
91
  ra: RA { $$ = getToken(yytext,yy,_$); };
89
92
  rc: RC { $$ = getToken(yytext,yy,_$); };
90
93
  rp: RP { $$ = getToken(yytext,yy,_$); };
94
+ rb: RB { $$ = getToken(yytext,yy,_$); };
91
95
  eq: EQ { $$ = getToken(yytext,yy,_$); };
92
96
  dots: DOTS { $$ = getToken(yytext,yy,_$); };
93
97
  dot: DOT { $$ = getToken(yytext,yy,_$); };
@@ -100,9 +104,14 @@ qmark: QMARK { $$ = getToken(yytext,yy,_$); };
100
104
  incremental: INCREMENTAL { $$ = getToken(yytext,yy,_$); };
101
105
 
102
106
  input_with_eof: initialize_symbol_table defs comp EOF {
103
- const result = {defs: {rels: s.rels, codes: s.codes}, exp: $3};
104
- // console.log(JSON.stringify(result, "", 2));
105
- // process.exit(0);
107
+ const result = {
108
+ defs: {
109
+ rels: s.rels,
110
+ codes: s.codes,
111
+ patterns: s.patterns
112
+ },
113
+ exp: $3
114
+ };
106
115
  return result;
107
116
  };
108
117
 
@@ -113,17 +122,71 @@ initialize_symbol_table
113
122
 
114
123
  defs: { }
115
124
  | defs name eq comp sc { s.add_rel($2.value,$4); }
125
+ | defs name lb pattern_params rb eq filter sc
126
+ {
127
+ const seen = new Set();
128
+ for (const p of $4) {
129
+ if (seen.has(p)) {
130
+ const msg =
131
+ `Duplicate parameter '${p}' ` +
132
+ `in pattern '${$2.value}'.`;
133
+ anError(@4, msg);
134
+ }
135
+ seen.add(p);
136
+ }
137
+ s.add_pattern($2.value, $4, $7);
138
+ }
139
+ ;
140
+
141
+ pattern_params
142
+ : /* empty */ { $$ = []; }
143
+ | non_empty_pattern_params { $$ = $1; }
144
+ ;
145
+
146
+ non_empty_pattern_params
147
+ : name { $$ = [$1.value]; }
148
+ | non_empty_pattern_params comma name
149
+ { $$ = [].concat($1, $3.value); }
116
150
  ;
117
151
 
118
152
  filter_
119
153
  : lp dots rp { $$ = { type: null, open: true, fields: {}, start: $1.start, end: $3.end}; }
120
154
  | la labelled_filters ra { $$ = { type: "union", open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
121
155
  | lc labelled_filters rc { $$ = { type: "product", open: $2.open, fields: $2.fields, start: $1.start, end: $3.end}; }
156
+ | name lb pattern_args rb
157
+ {
158
+ $$ = {
159
+ type: "pattern_apply",
160
+ pattern: $1.value,
161
+ args: $3,
162
+ start: $1.start,
163
+ end: $4.end
164
+ };
165
+ }
166
+ ;
167
+
168
+ pattern_args
169
+ : /* empty */ { $$ = []; }
170
+ | non_empty_pattern_args { $$ = $1; }
171
+ ;
172
+
173
+ non_empty_pattern_args
174
+ : filter { $$ = [$1]; }
175
+ | non_empty_pattern_args comma filter
176
+ { $$ = [].concat($1, $3); }
122
177
  ;
123
178
 
124
179
  filter
125
180
  : filter_ { $$ = $1; }
126
- | filter_ EQ name { $$ = { name: $3.value, ...$1, start: $1.start, end: $3.end }; }
181
+ | filter_ EQ name
182
+ {
183
+ $$ = {
184
+ ...$1,
185
+ name: $3.value,
186
+ start: $1.start,
187
+ end: $3.end
188
+ };
189
+ }
127
190
  | name { $$ = { type: 'name', name: $1.value, open: true, start: $1.start, end: $1.end}; }
128
191
  ;
129
192
  labelled_filters
package/parser.mjs CHANGED
@@ -116,12 +116,12 @@ function fromEscString(escString) {
116
116
 
117
117
 
118
118
  var parser = (function(){
119
- var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,12,14,26,28,30,38],$V1=[1,9],$V2=[1,20],$V3=[1,19],$V4=[1,18],$V5=[1,21],$V6=[1,22],$V7=[1,23],$V8=[1,24],$V9=[1,25],$Va=[2,47],$Vb=[4,6,8,10,12,14,16,18,20,26,28,30,32,34,38,45],$Vc=[1,37],$Vd=[1,44],$Ve=[4,6],$Vf=[1,59],$Vg=[1,61],$Vh=[18,32],$Vi=[4,6,8,10,12,14,26,28,30,38],$Vj=[1,65],$Vk=[1,68],$Vl=[16,32],$Vm=[4,6,8,10,12,14,16,18,20,22,26,28,30,32,34,38,45],$Vn=[2,30],$Vo=[1,73],$Vp=[2,31],$Vq=[2,59],$Vr=[16,18,32];
119
+ var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,12,14,30,32,34,42],$V1=[1,9],$V2=[1,20],$V3=[1,19],$V4=[1,18],$V5=[1,21],$V6=[1,22],$V7=[1,23],$V8=[1,24],$V9=[1,25],$Va=[2,59],$Vb=[1,32],$Vc=[1,31],$Vd=[4,6,8,10,12,14,18,20,22,30,32,34,36,38,42,49],$Ve=[1,39],$Vf=[1,46],$Vg=[4,6],$Vh=[1,64],$Vi=[1,66],$Vj=[20,36],$Vk=[4,6,8,10,12,14,30,32,34,42],$Vl=[1,70],$Vm=[1,73],$Vn=[18,36],$Vo=[4,6,8,10,12,14,18,20,22,24,26,30,32,34,36,38,42,49],$Vp=[4,6,8,10,12,14,18,20,22,24,30,32,34,36,38,42,49],$Vq=[2,42],$Vr=[1,79],$Vs=[2,43],$Vt=[1,89],$Vu=[1,91],$Vv=[24,36],$Vw=[2,71],$Vx=[18,20,36];
120
120
  var parser = {trace: function trace () { },
121
121
  yy: {},
122
- symbols_: {"error":2,"str":3,"STRING":4,"name":5,"NAME":6,"at":7,"AT":8,"la":9,"LA":10,"lc":11,"LC":12,"lp":13,"LP":14,"ra":15,"RA":16,"rc":17,"RC":18,"rp":19,"RP":20,"eq":21,"EQ":22,"dots":23,"DOTS":24,"dot":25,"DOT":26,"div":27,"DIV":28,"vid":29,"VID":30,"comma":31,"COMMA":32,"sc":33,"SC":34,"col":35,"COL":36,"qmark":37,"QMARK":38,"incremental":39,"INCREMENTAL":40,"input_with_eof":41,"initialize_symbol_table":42,"defs":43,"comp":44,"EOF":45,"filter_":46,"labelled_filters":47,"filter":48,"non_empty_labelled_filters":49,"filter_label":50,"exp":51,"labelled":52,"list":53,"non_empty_labelled":54,"comp_label":55,"non_empty_list":56,"$accept":0,"$end":1},
123
- terminals_: {2:"error",4:"STRING",6:"NAME",8:"AT",10:"LA",12:"LC",14:"LP",16:"RA",18:"RC",20:"RP",22:"EQ",24:"DOTS",26:"DOT",28:"DIV",30:"VID",32:"COMMA",34:"SC",36:"COL",38:"QMARK",40:"INCREMENTAL",45:"EOF"},
124
- 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,4],[42,0],[42,1],[43,0],[43,5],[46,3],[46,3],[46,3],[48,1],[48,3],[48,1],[47,0],[47,1],[49,1],[49,3],[50,1],[50,2],[50,2],[50,3],[50,3],[44,1],[44,2],[51,3],[51,3],[51,2],[51,2],[51,3],[51,1],[51,2],[51,2],[51,2],[51,2],[51,2],[51,2],[51,2],[52,0],[52,1],[54,1],[54,3],[55,2],[55,2],[55,3],[55,3],[53,0],[53,1],[56,1],[56,3]],
122
+ symbols_: {"error":2,"str":3,"STRING":4,"name":5,"NAME":6,"at":7,"AT":8,"la":9,"LA":10,"lc":11,"LC":12,"lp":13,"LP":14,"lb":15,"LB":16,"ra":17,"RA":18,"rc":19,"RC":20,"rp":21,"RP":22,"rb":23,"RB":24,"eq":25,"EQ":26,"dots":27,"DOTS":28,"dot":29,"DOT":30,"div":31,"DIV":32,"vid":33,"VID":34,"comma":35,"COMMA":36,"sc":37,"SC":38,"col":39,"COL":40,"qmark":41,"QMARK":42,"incremental":43,"INCREMENTAL":44,"input_with_eof":45,"initialize_symbol_table":46,"defs":47,"comp":48,"EOF":49,"pattern_params":50,"filter":51,"non_empty_pattern_params":52,"filter_":53,"labelled_filters":54,"pattern_args":55,"non_empty_pattern_args":56,"non_empty_labelled_filters":57,"filter_label":58,"exp":59,"labelled":60,"list":61,"non_empty_labelled":62,"comp_label":63,"non_empty_list":64,"$accept":0,"$end":1},
123
+ terminals_: {2:"error",4:"STRING",6:"NAME",8:"AT",10:"LA",12:"LC",14:"LP",16:"LB",18:"RA",20:"RC",22:"RP",24:"RB",26:"EQ",28:"DOTS",30:"DOT",32:"DIV",34:"VID",36:"COMMA",38:"SC",40:"COL",42:"QMARK",44:"INCREMENTAL",49:"EOF"},
124
+ 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,1],[45,4],[46,0],[46,1],[47,0],[47,5],[47,8],[50,0],[50,1],[52,1],[52,3],[53,3],[53,3],[53,3],[53,4],[55,0],[55,1],[56,1],[56,3],[51,1],[51,3],[51,1],[54,0],[54,1],[57,1],[57,3],[58,1],[58,2],[58,2],[58,3],[58,3],[48,1],[48,2],[59,3],[59,3],[59,2],[59,2],[59,3],[59,1],[59,2],[59,2],[59,2],[59,2],[59,2],[59,2],[59,2],[60,0],[60,1],[62,1],[62,3],[63,2],[63,2],[63,3],[63,3],[61,0],[61,1],[64,1],[64,3]],
125
125
  performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
126
126
  /* this == yyval */
127
127
 
@@ -130,48 +130,101 @@ switch (yystate) {
130
130
  case 1:
131
131
  this.$ = getToken(yytext,yy,_$); this.$.value = fromEscString(this.$.value);
132
132
  break;
133
- case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19:
133
+ case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21:
134
134
  this.$ = getToken(yytext,yy,_$);
135
135
  break;
136
- case 20:
136
+ case 22:
137
137
 
138
- const result = {defs: {rels: s.rels, codes: s.codes}, exp: $$[$0-1]};
139
- // console.log(JSON.stringify(result, "", 2));
140
- // process.exit(0);
138
+ const result = {
139
+ defs: {
140
+ rels: s.rels,
141
+ codes: s.codes,
142
+ patterns: s.patterns
143
+ },
144
+ exp: $$[$0-1]
145
+ };
141
146
  return result;
142
147
 
143
148
  break;
144
- case 21:
149
+ case 23:
145
150
  s = new SymbolTable();
146
151
  break;
147
- case 22: case 23:
152
+ case 24: case 25:
148
153
 
149
154
  break;
150
- case 24:
155
+ case 26:
151
156
  s.add_rel($$[$0-3].value,$$[$0-1]);
152
157
  break;
153
- case 25:
158
+ case 27:
159
+
160
+ const seen = new Set();
161
+ for (const p of $$[$0-4]) {
162
+ if (seen.has(p)) {
163
+ const msg =
164
+ `Duplicate parameter '${p}' ` +
165
+ `in pattern '${$$[$0-6].value}'.`;
166
+ anError(_$[$0-4], msg);
167
+ }
168
+ seen.add(p);
169
+ }
170
+ s.add_pattern($$[$0-6].value, $$[$0-4], $$[$0-1]);
171
+
172
+ break;
173
+ case 28: case 36: case 75:
174
+ this.$ = [];
175
+ break;
176
+ case 29: case 37: case 40: case 52: case 76:
177
+ this.$ = $$[$0];
178
+ break;
179
+ case 30:
180
+ this.$ = [$$[$0].value];
181
+ break;
182
+ case 31:
183
+ this.$ = [].concat($$[$0-2], $$[$0].value);
184
+ break;
185
+ case 32:
154
186
  this.$ = { type: null, open: true, fields: {}, start: $$[$0-2].start, end: $$[$0].end};
155
187
  break;
156
- case 26:
188
+ case 33:
157
189
  this.$ = { type: "union", open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
158
190
  break;
159
- case 27:
191
+ case 34:
160
192
  this.$ = { type: "product", open: $$[$0-1].open, fields: $$[$0-1].fields, start: $$[$0-2].start, end: $$[$0].end};
161
193
  break;
162
- case 28: case 40: case 64:
163
- this.$ = $$[$0];
194
+ case 35:
195
+
196
+ this.$ = {
197
+ type: "pattern_apply",
198
+ pattern: $$[$0-3].value,
199
+ args: $$[$0-1],
200
+ start: $$[$0-3].start,
201
+ end: $$[$0].end
202
+ };
203
+
164
204
  break;
165
- case 29:
166
- this.$ = { name: $$[$0].value, ...$$[$0-2], start: $$[$0-2].start, end: $$[$0].end };
205
+ case 38: case 45: case 77:
206
+ this.$ = [$$[$0]];
167
207
  break;
168
- case 30:
208
+ case 39:
209
+ this.$ = [].concat($$[$0-2], $$[$0]);
210
+ break;
211
+ case 41:
212
+
213
+ this.$ = {
214
+ ...$$[$0-2],
215
+ name: $$[$0].value,
216
+ start: $$[$0-2].start,
217
+ end: $$[$0].end
218
+ };
219
+
220
+ break;
221
+ case 42:
169
222
  this.$ = { type: 'name', name: $$[$0].value, open: true, start: $$[$0].start, end: $$[$0].end};
170
223
  break;
171
- case 31:
224
+ case 43:
172
225
  this.$ = { fields: {}};
173
226
  break;
174
- case 32:
227
+ case 44:
175
228
  this.$ = $$[$0].reduce((r, lc) => {
176
229
  if (lc.dots) {
177
230
  r.open = true;
@@ -183,58 +236,55 @@ case 32:
183
236
  return r }
184
237
  , { fields: {} });
185
238
  break;
186
- case 33: case 65:
187
- this.$ = [$$[$0]];
188
- break;
189
- case 34: case 66:
239
+ case 46: case 78:
190
240
  this.$ = [].concat($$[$0-2],$$[$0]);
191
241
  break;
192
- case 35:
242
+ case 47:
193
243
  this.$ = {dots: true };
194
244
  break;
195
- case 36: case 37:
245
+ case 48: case 49:
196
246
  this.$ = {label: $$[$0].value, filter: $$[$0-1]};
197
247
  break;
198
- case 38: case 39:
248
+ case 50: case 51:
199
249
  this.$ = {label: $$[$0-2].value, filter: $$[$0]};
200
250
  break;
201
- case 41:
251
+ case 53:
202
252
  this.$ = {...comp($$[$0-1], $$[$0]), start: $$[$0-1].start, end:$$[$0].end};
203
253
  break;
204
- case 42:
254
+ case 54:
205
255
  this.$ = {...$$[$0-1], start: $$[$0-2].start, end: $$[$0].end};
206
256
  break;
207
- case 43:
257
+ case 55:
208
258
  this.$ = {...union($$[$0-1]), start: $$[$0-2].start, end: $$[$0].end};
209
259
  break;
210
- case 44:
260
+ case 56:
211
261
  this.$ = {op: "ref", ref: "@" + $$[$0].value, start: $$[$0-1].start, end: $$[$0].end};
212
262
  break;
213
- case 45:
263
+ case 57:
214
264
  this.$ = {...identity, start: $$[$0-1].start, end: $$[$0].end};
215
265
  break;
216
- case 46:
266
+ case 58:
217
267
  this.$ = {...$$[$0-1], start: $$[$0-2].start, end: $$[$0].end };
218
268
  break;
219
- case 47:
269
+ case 59:
220
270
  this.$ = {op: "ref", ref: $$[$0].value, start: $$[$0].start, end: $$[$0].end};
221
271
  break;
222
- case 48: case 49:
272
+ case 60: case 61:
223
273
  this.$ = {op: "dot", dot: $$[$0].value, start: $$[$0-1].start, end: $$[$0].end };
224
274
  break;
225
- case 50: case 51:
275
+ case 62: case 63:
226
276
  this.$ = {op: "div", div: $$[$0].value, start: $$[$0-1].start, end: $$[$0].end };
227
277
  break;
228
- case 52: case 53:
278
+ case 64: case 65:
229
279
  this.$ = {op: "vid", vid: $$[$0].value, start: $$[$0-1].start, end: $$[$0].end };
230
280
  break;
231
- case 54:
281
+ case 66:
232
282
  this.$ = {op: "filter", filter: $$[$0], start: $$[$0-1].start, end:$$[$0].end};
233
283
  break;
234
- case 55:
284
+ case 67:
235
285
  this.$ = {op: "product", product: []};
236
286
  break;
237
- case 56:
287
+ case 68:
238
288
  $$[$0].product.reduce( (labels, {label}) =>
239
289
  { if (labels[label])
240
290
  anError(this._$,`Duplicate label '${label}'.`)
@@ -242,25 +292,22 @@ case 56:
242
292
  return labels; }, {});
243
293
  this.$ = $$[$0];
244
294
  break;
245
- case 57:
295
+ case 69:
246
296
  this.$ = {op: "product", product: [$$[$0]]};
247
297
  break;
248
- case 58:
298
+ case 70:
249
299
  $$[$0-2].product = [].concat($$[$0-2].product,$$[$0]); this.$ = $$[$0-2];
250
300
  break;
251
- case 59: case 60:
301
+ case 71: case 72:
252
302
  this.$ = {label: $$[$0].value, exp: $$[$0-1]};
253
303
  break;
254
- case 61: case 62:
304
+ case 73: case 74:
255
305
  this.$ = {label: $$[$0-2].value, exp: $$[$0]};
256
306
  break;
257
- case 63:
258
- this.$ = [];
259
- break;
260
307
  }
261
308
  },
262
- table: [o($V0,[2,21],{41:1,42:2,39:3,40:[1,4]}),{1:[3]},o($V0,[2,23],{43:5}),o($V0,[2,22]),o($V0,[2,19]),{5:7,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:6,51:8},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,45:[1,26],51:27},o([6,8,10,12,14,26,28,30,38,45],$Va,{21:29,22:[1,30]}),o($Vb,[2,40]),o([4,6,8,10,12,14,16,18,20,22,26,28,30,32,34,36,38,45],[2,2]),{3:36,4:$Vc,5:35,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,18:[2,55],25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:34,51:8,52:31,54:32,55:33},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,16:[2,63],25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:40,51:8,53:38,56:39},{5:41,6:$V1},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,19:42,20:$Vd,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:43,51:8},{3:46,4:$Vc,5:45,6:$V1},{3:48,4:$Vc,5:47,6:$V1},{3:50,4:$Vc,5:49,6:$V1},{5:53,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,46:52,48:51},o([4,6,8,10,12,14,18,24,26,28,30,38],[2,5]),o([4,6,8,10,12,14,16,24,26,28,30,38],[2,4]),{6:[2,3]},o([6,8,10,12,14,20,24,26,28,30,38],[2,6]),o($Ve,[2,12]),o($Ve,[2,13]),o($Ve,[2,14]),o([6,10,12,14],[2,18]),{1:[2,20]},o($Vb,[2,41]),o([6,8,10,12,14,16,18,20,26,28,30,32,34,38,45],$Va),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:57,51:8},o($V0,[2,10]),{17:58,18:$Vf},{18:[2,56],31:60,32:$Vg},o($Vh,[2,57]),{3:63,4:$Vc,5:62,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,51:27},o($Vi,$Va,{35:64,36:$Vj}),{35:66,36:$Vj},o([4,6,8,10,12,14,16,18,20,26,28,30,32,34,36,38,45],[2,1]),{15:67,16:$Vk},{16:[2,64],31:69,32:$Vg},o($Vl,[2,65],{11:10,9:11,7:12,13:13,25:14,27:15,29:16,37:17,51:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,26:$V6,28:$V7,30:$V8,38:$V9}),o($Vb,[2,44]),o($Vb,[2,45]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,19:70,20:$Vd,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,51:27},o($Vm,[2,9]),o($Vb,[2,48]),o($Vb,[2,49]),o($Vb,[2,50]),o($Vb,[2,51]),o($Vb,[2,52]),o($Vb,[2,53]),o($Vb,[2,54]),o($Vb,[2,28],{22:[1,71]}),o($Vb,$Vn),{23:72,24:$Vo},{3:80,4:$Vc,5:79,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,16:$Vp,23:77,24:$Vo,46:52,47:74,48:78,49:75,50:76},{3:80,4:$Vc,5:79,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,18:$Vp,23:77,24:$Vo,46:52,47:81,48:78,49:75,50:76},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,33:82,34:[1,83],37:17,38:$V9,51:27},o($Vb,[2,42]),o($Vm,[2,8]),{3:36,4:$Vc,5:35,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:34,51:8,55:84},o([4,6,8,10,12,14,24,26,28,30,38],[2,15]),o($Vi,$Va,{18:$Vq,32:$Vq}),o($Vh,[2,60]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:85,51:8},o($V0,[2,17]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:86,51:8},o($Vb,[2,43]),o($Vm,[2,7]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,25:14,26:$V6,27:15,28:$V7,29:16,30:$V8,37:17,38:$V9,44:87,51:8},o($Vb,[2,46]),{5:88,6:$V1},{19:89,20:$Vd},o([16,18,20,32],[2,11]),{15:90,16:$Vk},o([16,18],[2,32],{31:91,32:$Vg}),o($Vr,[2,33]),o($Vr,[2,35]),{3:93,4:$Vc,5:92,6:$V1},o($Ve,$Vn,{35:94,36:$Vj}),{35:95,36:$Vj},{17:96,18:$Vf},o($V0,[2,24]),o($V0,[2,16]),o($Vh,[2,58]),o($Vh,[2,61],{11:10,9:11,7:12,13:13,25:14,27:15,29:16,37:17,51:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,26:$V6,28:$V7,30:$V8,38:$V9}),o($Vh,[2,62],{11:10,9:11,7:12,13:13,25:14,27:15,29:16,37:17,51:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,26:$V6,28:$V7,30:$V8,38:$V9}),o($Vl,[2,66],{11:10,9:11,7:12,13:13,25:14,27:15,29:16,37:17,51:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,26:$V6,28:$V7,30:$V8,38:$V9}),o($Vb,[2,29]),o($Vm,[2,25]),o($Vm,[2,26]),{3:80,4:$Vc,5:79,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,23:77,24:$Vo,46:52,48:78,50:97},o($Vr,[2,36]),o($Vr,[2,37]),{5:53,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,46:52,48:98},{5:53,6:$V1,9:55,10:$V3,11:56,12:$V4,13:54,14:$V5,46:52,48:99},o($Vm,[2,27]),o($Vr,[2,34]),o($Vr,[2,38]),o($Vr,[2,39])],
263
- defaultActions: {20:[2,3],26:[2,20]},
309
+ table: [o($V0,[2,23],{45:1,46:2,43:3,44:[1,4]}),{1:[3]},o($V0,[2,25],{47:5}),o($V0,[2,24]),o($V0,[2,21]),{5:7,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:6,59:8},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,49:[1,26],59:27},o([6,8,10,12,14,30,32,34,42,49],$Va,{25:29,15:30,16:$Vb,26:$Vc}),o($Vd,[2,52]),o([4,6,8,10,12,14,16,18,20,22,24,26,30,32,34,36,38,40,42,49],[2,2]),{3:38,4:$Ve,5:37,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,20:[2,67],29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:36,59:8,60:33,62:34,63:35},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,18:[2,75],29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:42,59:8,61:40,64:41},{5:43,6:$V1},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,21:44,22:$Vf,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:45,59:8},{3:48,4:$Ve,5:47,6:$V1},{3:50,4:$Ve,5:49,6:$V1},{3:52,4:$Ve,5:51,6:$V1},{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,51:53,53:54},o([4,6,8,10,12,14,20,28,30,32,34,42],[2,5]),o([4,6,8,10,12,14,18,28,30,32,34,42],[2,4]),{6:[2,3]},o([6,8,10,12,14,22,28,30,32,34,42],[2,6]),o($Vg,[2,14]),o($Vg,[2,15]),o($Vg,[2,16]),o([6,10,12,14],[2,20]),{1:[2,22]},o($Vd,[2,53]),o([6,8,10,12,14,18,20,22,30,32,34,36,38,42,49],$Va),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:59,59:8},{5:62,6:$V1,24:[2,28],50:60,52:61},o($V0,[2,12]),o([6,10,12,14,24],[2,7]),{19:63,20:$Vh},{20:[2,68],35:65,36:$Vi},o($Vj,[2,69]),{3:68,4:$Ve,5:67,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,59:27},o($Vk,$Va,{39:69,40:$Vl}),{39:71,40:$Vl},o([4,6,8,10,12,14,18,20,22,30,32,34,36,38,40,42,49],[2,1]),{17:72,18:$Vm},{18:[2,76],35:74,36:$Vi},o($Vn,[2,77],{11:10,9:11,7:12,13:13,29:14,31:15,33:16,41:17,59:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,30:$V6,32:$V7,34:$V8,42:$V9}),o($Vd,[2,56]),o($Vd,[2,57]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,21:75,22:$Vf,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,59:27},o($Vo,[2,10]),o($Vd,[2,60]),o($Vd,[2,61]),o($Vd,[2,62]),o($Vd,[2,63]),o($Vd,[2,64]),o($Vd,[2,65]),o($Vd,[2,66]),o($Vp,[2,40],{26:[1,76]}),o($Vp,$Vq,{15:77,16:$Vb}),{27:78,28:$Vr},{3:86,4:$Ve,5:85,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,18:$Vs,27:83,28:$Vr,51:84,53:54,54:80,57:81,58:82},{3:86,4:$Ve,5:85,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,20:$Vs,27:83,28:$Vr,51:84,53:54,54:87,57:81,58:82},{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,37:88,38:$Vt,41:17,42:$V9,59:27},{23:90,24:$Vu},{24:[2,29],35:92,36:$Vi},o($Vv,[2,30]),o($Vd,[2,54]),o($Vo,[2,9]),{3:38,4:$Ve,5:37,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:36,59:8,63:93},o([4,6,8,10,12,14,28,30,32,34,42],[2,17]),o($Vk,$Va,{20:$Vw,36:$Vw}),o($Vj,[2,72]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:94,59:8},o($V0,[2,19]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:95,59:8},o($Vd,[2,55]),o($Vo,[2,8]),{5:28,6:$V1,7:12,8:$V2,9:11,10:$V3,11:10,12:$V4,13:13,14:$V5,29:14,30:$V6,31:15,32:$V7,33:16,34:$V8,41:17,42:$V9,48:96,59:8},o($Vd,[2,58]),{5:97,6:$V1},{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,24:[2,36],51:100,53:54,55:98,56:99},{21:101,22:$Vf},o([18,20,22,36],[2,13]),{17:102,18:$Vm},o([18,20],[2,44],{35:103,36:$Vi}),o($Vx,[2,45]),o($Vx,[2,47]),{3:105,4:$Ve,5:104,6:$V1},o($Vg,$Vq,{15:77,39:106,16:$Vb,40:$Vl}),{39:107,40:$Vl},{19:108,20:$Vh},o($V0,[2,26]),o($V0,[2,18]),{25:109,26:$Vc},o($Vo,[2,11]),{5:110,6:$V1},o($Vj,[2,70]),o($Vj,[2,73],{11:10,9:11,7:12,13:13,29:14,31:15,33:16,41:17,59:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,30:$V6,32:$V7,34:$V8,42:$V9}),o($Vj,[2,74],{11:10,9:11,7:12,13:13,29:14,31:15,33:16,41:17,59:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,30:$V6,32:$V7,34:$V8,42:$V9}),o($Vn,[2,78],{11:10,9:11,7:12,13:13,29:14,31:15,33:16,41:17,59:27,5:28,6:$V1,8:$V2,10:$V3,12:$V4,14:$V5,30:$V6,32:$V7,34:$V8,42:$V9}),o($Vp,[2,41]),{23:111,24:$Vu},{24:[2,37],35:112,36:$Vi},o($Vv,[2,38]),o($Vo,[2,32]),o($Vo,[2,33]),{3:86,4:$Ve,5:85,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,27:83,28:$Vr,51:84,53:54,58:113},o($Vx,[2,48]),o($Vx,[2,49]),{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,51:114,53:54},{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,51:115,53:54},o($Vo,[2,34]),{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,51:116,53:54},o($Vv,[2,31]),o($Vo,[2,35]),{5:55,6:$V1,9:57,10:$V3,11:58,12:$V4,13:56,14:$V5,51:117,53:54},o($Vx,[2,46]),o($Vx,[2,50]),o($Vx,[2,51]),{37:118,38:$Vt},o($Vv,[2,39]),o($V0,[2,27])],
310
+ defaultActions: {20:[2,3],26:[2,22]},
264
311
  parseError: function parseError (str, hash) {
265
312
  if (hash.recoverable) {
266
313
  this.trace(str);
@@ -752,11 +799,11 @@ case 7:return 18;
752
799
  break;
753
800
  case 8:return 20;
754
801
  break;
755
- case 9:return 22;
802
+ case 9:return 22;
756
803
  break;
757
804
  case 10:return 24;
758
805
  break;
759
- case 11:return 26;
806
+ case 11:return 26;
760
807
  break;
761
808
  case 12:return 28;
762
809
  break;
@@ -770,20 +817,24 @@ case 16:return 36;
770
817
  break;
771
818
  case 17:return 38;
772
819
  break;
773
- case 18:return 8;
820
+ case 18:return 40;
821
+ break;
822
+ case 19:return 42;
823
+ break;
824
+ case 20:return 8;
774
825
  break;
775
- case 19:return 4;
826
+ case 21:return 4;
776
827
  break;
777
- case 20:return 6;
828
+ case 22:return 6;
778
829
  break;
779
- case 21:return 40;
830
+ case 23:return 44;
780
831
  break;
781
- case 22:return 45;
832
+ case 24:return 49;
782
833
  break;
783
834
  }
784
835
  },
785
- rules: [/^(?:[/][*]([^*]*[*]+[^*/])*[^*]*[*]+[/])/,/^(?:(\/\/|#|%|--|\\\\)[^\n]*)/,/^(?:\s+)/,/^(?:<)/,/^(?:\{)/,/^(?:\()/,/^(?:>)/,/^(?:\})/,/^(?:\))/,/^(?:=)/,/^(?:\.\.\.)/,/^(?:\.)/,/^(?:\/)/,/^(?:(\\|\|))/,/^(?:,)/,/^(?:;)/,/^(?::)/,/^(?:\?)/,/^(?:@)/,/^(?:"([^"\\]|\\(.|\n))*"|'([^'\\]|\\(.|\n))*')/,/^(?:[a-zA-Z0-9_+-][a-zA-Z0-9_?!+-]*)/,/^(?:~)/,/^(?:$)/],
786
- conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"inclusive":true}}
836
+ rules: [/^(?:[/][*]([^*]*[*]+[^*/])*[^*]*[*]+[/])/,/^(?:(\/\/|#|%|--|\\\\)[^\n]*)/,/^(?:\s+)/,/^(?:<)/,/^(?:\{)/,/^(?:\()/,/^(?:\[)/,/^(?:>)/,/^(?:\})/,/^(?:\))/,/^(?:\])/,/^(?:=)/,/^(?:\.\.\.)/,/^(?:\.)/,/^(?:\/)/,/^(?:(\\|\|))/,/^(?:,)/,/^(?:;)/,/^(?::)/,/^(?:\?)/,/^(?:@)/,/^(?:"([^"\\]|\\(.|\n))*"|'([^'\\]|\\(.|\n))*')/,/^(?:[a-zA-Z0-9_+-][a-zA-Z0-9_?!+-]*)/,/^(?:~)/,/^(?:$)/],
837
+ conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"inclusive":true}}
787
838
  });
788
839
  return lexer;
789
840
  })();
package/pretty.mjs CHANGED
@@ -49,6 +49,11 @@ function prettyFilter ( filter ) {
49
49
  }
50
50
  switch (filter.type) {
51
51
 
52
+ case "pattern_apply": {
53
+ const argsStr = (filter.args || []).map(prettyFilter).join(", ");
54
+ const knot = filter.name ? `=${filter.name}` : "";
55
+ return `${filter.pattern}[${argsStr}]${knot}`;
56
+ }
52
57
  case "code":
53
58
  return `$${filter.code}`;
54
59
  case "name":