@fraczak/k 1.0.1 → 1.1.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/k.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Generated by CoffeeScript 2.7.0
2
2
  (function() {
3
3
  //!/usr/bin/env coffee
4
- var fs, jsonStream, k, kScript, prog,
4
+ var fs, jsonStream, k, kScript, oneJson, prog,
5
5
  splice = [].splice;
6
6
 
7
7
  fs = require("fs");
@@ -10,7 +10,7 @@
10
10
 
11
11
  prog = process.argv[1];
12
12
 
13
- ({kScript, jsonStream} = (function(args) {
13
+ ({kScript, jsonStream, oneJson} = (function(oneJson, args) {
14
14
  var e;
15
15
  try {
16
16
  kScript = (function(arg) {
@@ -25,48 +25,69 @@
25
25
  })(args.shift());
26
26
  kScript = k.compile(kScript);
27
27
  jsonStream = (function(arg) {
28
+ if (arg === "-1") {
29
+ oneJson = true;
30
+ arg = args.shift();
31
+ }
28
32
  if (arg == null) {
29
33
  return process.stdin;
30
34
  }
31
35
  return fs.createReadStream(arg);
32
36
  })(args.shift());
33
- return {kScript, jsonStream};
37
+ return {kScript, jsonStream, oneJson};
34
38
  } catch (error) {
35
39
  e = error;
36
40
  console.error(e);
37
- console.error(`Usage: ${prog} ( k-expr | -k k-file ) [ json-file ]`);
41
+ console.error(`Usage: ${prog} ( k-expr | -k k-file ) [ -1 ] [ json-file ]`);
38
42
  console.error(` E.g., echo '{\"a\": 12}' | ${prog} '[(),()]'`);
39
43
  return process.exit(-1);
40
44
  }
41
- })(process.argv.slice(2)));
45
+ })(false, process.argv.slice(2)));
42
46
 
43
- (function(buffer, line) {
44
- return jsonStream.on('data', function(data) {
45
- var e, first, i, json, last, len, ref, rest, results, todo;
46
- [first, ...rest] = data.toString("utf8").split("\n");
47
- buffer.push(first);
48
- if (rest.length > 0) {
49
- todo = buffer.join("");
50
- ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
51
- buffer = [last];
52
- todo = [todo, ...rest];
53
- results = [];
54
- for (i = 0, len = todo.length; i < len; i++) {
55
- json = todo[i];
56
- if (!json.match(/^[ \n\t]*(?:#.*)?$/)) {
57
- try {
58
- console.log(JSON.stringify(kScript(JSON.parse(json))));
59
- } catch (error) {
60
- e = error;
61
- console.error(`Problem [line ${line}]: '${json}'`);
62
- console.error(e);
47
+ if (oneJson) {
48
+ (function(buffer) {
49
+ jsonStream.on('data', function(data) {
50
+ return buffer.push(data);
51
+ });
52
+ return jsonStream.on('end', function() {
53
+ var e;
54
+ try {
55
+ return console.log(JSON.stringify(kScript(JSON.parse(buffer.join('')))));
56
+ } catch (error) {
57
+ e = error;
58
+ return console.error(e);
59
+ }
60
+ });
61
+ })([]);
62
+ } else {
63
+ (function(buffer, line) {
64
+ return jsonStream.on('data', function(data) {
65
+ var e, first, i, json, last, len, ref, rest, results, todo;
66
+ [first, ...rest] = data.toString("utf8").split("\n");
67
+ buffer.push(first);
68
+ if (rest.length > 0) {
69
+ todo = buffer.join("");
70
+ ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
71
+ buffer = [last];
72
+ todo = [todo, ...rest];
73
+ results = [];
74
+ for (i = 0, len = todo.length; i < len; i++) {
75
+ json = todo[i];
76
+ if (!json.match(/^[ \n\t]*(?:#.*)?$/)) {
77
+ try {
78
+ console.log(JSON.stringify(kScript(JSON.parse(json))));
79
+ } catch (error) {
80
+ e = error;
81
+ console.error(`Problem [line ${line}]: '${json}'`);
82
+ console.error(e);
83
+ }
63
84
  }
85
+ results.push(line = line + 1);
64
86
  }
65
- results.push(line = line + 1);
87
+ return results;
66
88
  }
67
- return results;
68
- }
69
- });
70
- })([], 0);
89
+ });
90
+ })([], 0);
91
+ }
71
92
 
72
93
  }).call(this);
package/k.sh CHANGED
@@ -2,7 +2,7 @@
2
2
  // Generated by CoffeeScript 2.7.0
3
3
  (function() {
4
4
  //!/usr/bin/env coffee
5
- var fs, jsonStream, k, kScript, prog,
5
+ var fs, jsonStream, k, kScript, oneJson, prog,
6
6
  splice = [].splice;
7
7
 
8
8
  fs = require("fs");
@@ -11,7 +11,7 @@
11
11
 
12
12
  prog = process.argv[1];
13
13
 
14
- ({kScript, jsonStream} = (function(args) {
14
+ ({kScript, jsonStream, oneJson} = (function(oneJson, args) {
15
15
  var e;
16
16
  try {
17
17
  kScript = (function(arg) {
@@ -26,48 +26,69 @@
26
26
  })(args.shift());
27
27
  kScript = k.compile(kScript);
28
28
  jsonStream = (function(arg) {
29
+ if (arg === "-1") {
30
+ oneJson = true;
31
+ arg = args.shift();
32
+ }
29
33
  if (arg == null) {
30
34
  return process.stdin;
31
35
  }
32
36
  return fs.createReadStream(arg);
33
37
  })(args.shift());
34
- return {kScript, jsonStream};
38
+ return {kScript, jsonStream, oneJson};
35
39
  } catch (error) {
36
40
  e = error;
37
41
  console.error(e);
38
- console.error(`Usage: ${prog} ( k-expr | -k k-file ) [ json-file ]`);
42
+ console.error(`Usage: ${prog} ( k-expr | -k k-file ) [ -1 ] [ json-file ]`);
39
43
  console.error(` E.g., echo '{\"a\": 12}' | ${prog} '[(),()]'`);
40
44
  return process.exit(-1);
41
45
  }
42
- })(process.argv.slice(2)));
46
+ })(false, process.argv.slice(2)));
43
47
 
44
- (function(buffer, line) {
45
- return jsonStream.on('data', function(data) {
46
- var e, first, i, json, last, len, ref, rest, results, todo;
47
- [first, ...rest] = data.toString("utf8").split("\n");
48
- buffer.push(first);
49
- if (rest.length > 0) {
50
- todo = buffer.join("");
51
- ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
52
- buffer = [last];
53
- todo = [todo, ...rest];
54
- results = [];
55
- for (i = 0, len = todo.length; i < len; i++) {
56
- json = todo[i];
57
- if (!json.match(/^[ \n\t]*(?:#.*)?$/)) {
58
- try {
59
- console.log(JSON.stringify(kScript(JSON.parse(json))));
60
- } catch (error) {
61
- e = error;
62
- console.error(`Problem [line ${line}]: '${json}'`);
63
- console.error(e);
48
+ if (oneJson) {
49
+ (function(buffer) {
50
+ jsonStream.on('data', function(data) {
51
+ return buffer.push(data);
52
+ });
53
+ return jsonStream.on('end', function() {
54
+ var e;
55
+ try {
56
+ return console.log(JSON.stringify(kScript(JSON.parse(buffer.join('')))));
57
+ } catch (error) {
58
+ e = error;
59
+ return console.error(e);
60
+ }
61
+ });
62
+ })([]);
63
+ } else {
64
+ (function(buffer, line) {
65
+ return jsonStream.on('data', function(data) {
66
+ var e, first, i, json, last, len, ref, rest, results, todo;
67
+ [first, ...rest] = data.toString("utf8").split("\n");
68
+ buffer.push(first);
69
+ if (rest.length > 0) {
70
+ todo = buffer.join("");
71
+ ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
72
+ buffer = [last];
73
+ todo = [todo, ...rest];
74
+ results = [];
75
+ for (i = 0, len = todo.length; i < len; i++) {
76
+ json = todo[i];
77
+ if (!json.match(/^[ \n\t]*(?:#.*)?$/)) {
78
+ try {
79
+ console.log(JSON.stringify(kScript(JSON.parse(json))));
80
+ } catch (error) {
81
+ e = error;
82
+ console.error(`Problem [line ${line}]: '${json}'`);
83
+ console.error(e);
84
+ }
64
85
  }
86
+ results.push(line = line + 1);
65
87
  }
66
- results.push(line = line + 1);
88
+ return results;
67
89
  }
68
- return results;
69
- }
70
- });
71
- })([], 0);
90
+ });
91
+ })([], 0);
92
+ }
72
93
 
73
94
  }).call(this);
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@fraczak/k",
3
- "version": "1.0.1",
4
- "description": "k-language for untyped JSON like data transformation",
3
+ "version": "1.1.1",
4
+ "description": "k-language for JSON-like data transformation",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "prepare": "coffee -c symbol-table.coffee; jison parser.jison",
8
8
  "prepublishOnly": "coffee -c *.coffee; echo '#!/usr/bin/env node' | cat - k.js > k.sh",
9
- "test": "coffee -c symbol-table.coffee; jison parser.jison; coffee test.coffee;"
9
+ "all": "npm run prepublishOnly; npm run prepare; npm run prepublishOnly",
10
+ "test": "coffee -c symbol-table.coffee; jison parser.jison; coffee test.coffee"
10
11
  },
11
12
  "author": "Wojciech Fraczak",
12
13
  "license": "ISC",
package/parser.jison CHANGED
@@ -18,17 +18,21 @@ var s = require("./symbol-table");
18
18
  "}" return 'RC';
19
19
  "]" return 'RB';
20
20
  ")" return 'RP';
21
+ "=" return 'EQ';
21
22
  "." return 'DOT';
22
23
  "," return 'COMMA';
24
+ ";" return 'SC';
25
+ ":" return 'COL';
26
+ "$" return 'DOLLAR';
23
27
  \"[^\"\n]*\"|\'[^\'\n]*\' return 'STRING'
24
- [a-zA-Z_][a-zA-Z0-9_]* return 'NAME';
28
+ [a-zA-Z_][a-zA-Z0-9_?!]* return 'NAME';
25
29
  0|[-]?[1-9][0-9]* return 'INT';
26
30
  <<EOF>> return 'EOF';
27
31
 
28
32
  /lex
29
33
 
30
34
  %token NAME STRING INT
31
- %token LA LC LB LP RA RP RB RC COMMA
35
+ %token LA LC LB LP RA RP RB RC EQ DOT COMMA SC COL DOLLAR
32
36
  %token EOF
33
37
 
34
38
  %start input_with_eof
@@ -39,20 +43,59 @@ name: NAME { $$ = String(yytext); };
39
43
  str: STRING { $$ = String(yytext).slice(1,-1); };
40
44
  int: INT { $$ = parseInt(String(yytext)); };
41
45
 
42
- input_with_eof: comp EOF {
43
- // console.log(JSON.stringify($1, "", 2));
44
- return $1;
46
+ input_with_eof: defs comp EOF {
47
+ result = {defs: {rels: s.rels, codes: s.codes}, exp: $2};
48
+ // console.log(JSON.stringify(result, "", 2));
49
+ return result;
45
50
  };
46
51
 
52
+ defs: { }
53
+ | defs name EQ comp SC { s.add_rel($2,$4); }
54
+ | defs DOLLAR name EQ code SC { s.add_code($3,$5); }
55
+ ;
56
+
57
+ code
58
+ : name { $$ = {code: "ref", ref: $1}; }
59
+ | LC labelled_codes RC { $$ = {code: "product",
60
+ product: $2.reduce((r, lc) => {
61
+ r[lc.label] = s.as_ref(lc.code);
62
+ return r }
63
+ , {})}; }
64
+ | LB code RB { $$ = {code: "vector", vector: s.as_ref($2)}; }
65
+ | LA labelled_codes RA { $$ = {code: "union",
66
+ union: $2.reduce((r, lc) => {
67
+ r[lc.label] = s.as_ref(lc.code);
68
+ return r }
69
+ , {})}; }
70
+ ;
71
+
72
+ labelled_codes
73
+ : { $$ = [] }
74
+ | non_empty_labelled_codes { $$ = $1; }
75
+ ;
76
+
77
+ non_empty_labelled_codes
78
+ : code_label { $$ = [$1]; }
79
+ | non_empty_labelled_codes COMMA code_label
80
+ { $$ = [].concat($1,$3); }
81
+ ;
82
+
83
+ code_label
84
+ : code name { $$ = {label: $2, code: $1}; }
85
+ | code str { $$ = {label: $2, code: $1}; }
86
+ | name COL code { $$ = {label: $1, code: $3}; }
87
+ | str COL code { $$ = {label: $1, code: $3}; }
88
+ ;
89
+
47
90
  comp
48
- : exp { $$ = $1; }
49
- | comp exp { $$ = s.comp($1, $2); }
91
+ : exp { $$ = $1; }
92
+ | comp exp { $$ = s.comp($1, $2); }
50
93
  ;
51
94
 
52
95
  exp
53
96
  : LC labelled RC { $$ = $2; }
54
97
  | LB list RB { $$ = {op: "vector", vector: $2}; }
55
- | LA list RA { $$ = {op: "union", union: $2}; }
98
+ | LA list RA { $$ = s.union($2); }
56
99
  | name { $$ = {op: "ref", ref: $1}; }
57
100
  | LP RP { $$ = s.identity; }
58
101
  | LP comp RP { $$ = $2; }
@@ -61,6 +104,7 @@ exp
61
104
  | DOT int { $$ = {op: "dot", dot: $2}; }
62
105
  | DOT str { $$ = {op: "dot", dot: $2}; }
63
106
  | DOT name { $$ = {op: "dot", dot: $2}; }
107
+ | DOLLAR code { $$ = {op: "code", code: s.as_ref($2)}; }
64
108
  ;
65
109
 
66
110
  labelled
@@ -78,6 +122,8 @@ non_empty_labelled
78
122
  comp_label
79
123
  : comp name { $$ = {label: $2, exp: $1}; }
80
124
  | comp str { $$ = {label: $2, exp: $1}; }
125
+ | name COL comp { $$ = {label: $1, exp: $3}; }
126
+ | str COL comp { $$ = {label: $1, exp: $3}; }
81
127
  ;
82
128
 
83
129
  list
package/parser.js CHANGED
@@ -72,12 +72,12 @@
72
72
  }
73
73
  */
74
74
  var parser = (function(){
75
- var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,12],$V1=[1,13],$V2=[1,14],$V3=[1,4],$V4=[1,5],$V5=[1,6],$V6=[1,8],$V7=[1,11],$V8=[4,6,8,11,13,16,18,19,20,21,22,23,26],$V9=[2,24],$Va=[2,10],$Vb=[2,13],$Vc=[4,6,8,11,13,15,16,18,19,20,21,22,23,26],$Vd=[15,26],$Ve=[18,20,26],$Vf=[4,6,8,13,16,19,21,23],$Vg=[2,22],$Vh=[2,23];
75
+ var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[4,6,8,15,17,20,22,31,33],$V1=[1,7],$V2=[1,15],$V3=[1,16],$V4=[1,8],$V5=[1,9],$V6=[1,10],$V7=[1,11],$V8=[1,14],$V9=[1,20],$Va=[4,6,8,12,15,17,20,22,31,33],$Vb=[2,25],$Vc=[1,24],$Vd=[1,25],$Ve=[1,26],$Vf=[4,6,8,12,14,15,17,19,20,21,22,23,26,31,32,33],$Vg=[2,42],$Vh=[2,28],$Vi=[2,8],$Vj=[2,12],$Vk=[19,26],$Vl=[21,23,26],$Vm=[19,23,26],$Vn=[2,38],$Vo=[2,39];
76
76
  var parser = {trace: function trace () { },
77
77
  yy: {},
78
- symbols_: {"error":2,"name":3,"NAME":4,"str":5,"STRING":6,"int":7,"INT":8,"input_with_eof":9,"comp":10,"EOF":11,"exp":12,"LC":13,"labelled":14,"RC":15,"LB":16,"list":17,"RB":18,"LA":19,"RA":20,"LP":21,"RP":22,"DOT":23,"non_empty_labelled":24,"comp_label":25,"COMMA":26,"non_empty_list":27,"$accept":0,"$end":1},
79
- terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",11:"EOF",13:"LC",15:"RC",16:"LB",18:"RB",19:"LA",20:"RA",21:"LP",22:"RP",23:"DOT",26:"COMMA"},
80
- productions_: [0,[3,1],[5,1],[7,1],[9,2],[10,1],[10,2],[12,3],[12,3],[12,3],[12,1],[12,2],[12,3],[12,1],[12,1],[12,2],[12,2],[12,2],[14,0],[14,1],[24,1],[24,3],[25,2],[25,2],[17,0],[17,1],[27,1],[27,3]],
78
+ symbols_: {"error":2,"name":3,"NAME":4,"str":5,"STRING":6,"int":7,"INT":8,"input_with_eof":9,"defs":10,"comp":11,"EOF":12,"EQ":13,"SC":14,"DOLLAR":15,"code":16,"LC":17,"labelled_codes":18,"RC":19,"LB":20,"RB":21,"LA":22,"RA":23,"non_empty_labelled_codes":24,"code_label":25,"COMMA":26,"COL":27,"exp":28,"labelled":29,"list":30,"LP":31,"RP":32,"DOT":33,"non_empty_labelled":34,"comp_label":35,"non_empty_list":36,"$accept":0,"$end":1},
79
+ terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",12:"EOF",13:"EQ",14:"SC",15:"DOLLAR",17:"LC",19:"RC",20:"LB",21:"RB",22:"LA",23:"RA",26:"COMMA",27:"COL",31:"LP",32:"RP",33:"DOT"},
80
+ productions_: [0,[3,1],[5,1],[7,1],[9,3],[10,0],[10,5],[10,6],[16,1],[16,3],[16,3],[16,3],[18,0],[18,1],[24,1],[24,3],[25,2],[25,2],[25,3],[25,3],[11,1],[11,2],[28,3],[28,3],[28,3],[28,1],[28,2],[28,3],[28,1],[28,1],[28,2],[28,2],[28,2],[28,2],[29,0],[29,1],[34,1],[34,3],[35,2],[35,2],[35,3],[35,3],[30,0],[30,1],[36,1],[36,3]],
81
81
  performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
82
82
  /* this == yyval */
83
83
 
@@ -94,68 +94,113 @@ case 3:
94
94
  break;
95
95
  case 4:
96
96
 
97
- // console.log(JSON.stringify($$[$0-1], "", 2));
98
- return $$[$0-1];
97
+ result = {defs: {rels: s.rels, codes: s.codes}, exp: $$[$0-1]};
98
+ // console.log(JSON.stringify(result, "", 2));
99
+ return result;
99
100
 
100
101
  break;
101
- case 5: case 19: case 25:
102
- this.$ = $$[$0];
102
+ case 5:
103
+
103
104
  break;
104
105
  case 6:
105
- this.$ = s.comp($$[$0-1], $$[$0]);
106
+ s.add_rel($$[$0-3],$$[$0-1]);
106
107
  break;
107
108
  case 7:
108
- this.$ = $$[$0-1];
109
+ s.add_code($$[$0-3],$$[$0-1]);
109
110
  break;
110
111
  case 8:
111
- this.$ = {op: "vector", vector: $$[$0-1]};
112
+ this.$ = {code: "ref", ref: $$[$0]};
112
113
  break;
113
114
  case 9:
114
- this.$ = {op: "union", union: $$[$0-1]};
115
+ this.$ = {code: "product",
116
+ product: $$[$0-1].reduce((r, lc) => {
117
+ r[lc.label] = s.as_ref(lc.code);
118
+ return r }
119
+ , {})};
115
120
  break;
116
121
  case 10:
117
- this.$ = {op: "ref", ref: $$[$0]};
122
+ this.$ = {code: "vector", vector: s.as_ref($$[$0-1])};
118
123
  break;
119
124
  case 11:
120
- this.$ = s.identity;
125
+ this.$ = {code: "union",
126
+ union: $$[$0-1].reduce((r, lc) => {
127
+ r[lc.label] = s.as_ref(lc.code);
128
+ return r }
129
+ , {})};
121
130
  break;
122
131
  case 12:
132
+ this.$ = []
133
+ break;
134
+ case 13: case 20: case 35: case 43:
135
+ this.$ = $$[$0];
136
+ break;
137
+ case 14: case 44:
138
+ this.$ = [$$[$0]];
139
+ break;
140
+ case 15: case 45:
141
+ this.$ = [].concat($$[$0-2],$$[$0]);
142
+ break;
143
+ case 16: case 17:
144
+ this.$ = {label: $$[$0], code: $$[$0-1]};
145
+ break;
146
+ case 18: case 19:
147
+ this.$ = {label: $$[$0-2], code: $$[$0]};
148
+ break;
149
+ case 21:
150
+ this.$ = s.comp($$[$0-1], $$[$0]);
151
+ break;
152
+ case 22:
153
+ this.$ = $$[$0-1];
154
+ break;
155
+ case 23:
156
+ this.$ = {op: "vector", vector: $$[$0-1]};
157
+ break;
158
+ case 24:
159
+ this.$ = s.union($$[$0-1]);
160
+ break;
161
+ case 25:
162
+ this.$ = {op: "ref", ref: $$[$0]};
163
+ break;
164
+ case 26:
165
+ this.$ = s.identity;
166
+ break;
167
+ case 27:
123
168
  this.$ = $$[$0-1];
124
169
  break;
125
- case 13:
170
+ case 28:
126
171
  this.$ = {op: "str", str: $$[$0]};
127
172
  break;
128
- case 14:
173
+ case 29:
129
174
  this.$ = {op: "int", int: $$[$0]};
130
175
  break;
131
- case 15: case 16: case 17:
176
+ case 30: case 31: case 32:
132
177
  this.$ = {op: "dot", dot: $$[$0]};
133
178
  break;
134
- case 18:
179
+ case 33:
180
+ this.$ = {op: "code", code: s.as_ref($$[$0])};
181
+ break;
182
+ case 34:
135
183
  this.$ = {op: "product", product: []};
136
184
  break;
137
- case 20:
185
+ case 36:
138
186
  this.$ = {op: "product", product: [$$[$0]]};
139
187
  break;
140
- case 21:
188
+ case 37:
141
189
  $$[$0-2].product = [].concat($$[$0-2].product,$$[$0]); this.$ = $$[$0-2];
142
190
  break;
143
- case 22: case 23:
191
+ case 38: case 39:
144
192
  this.$ = {label: $$[$0], exp: $$[$0-1]};
145
193
  break;
146
- case 24:
147
- this.$ = [];
148
- break;
149
- case 26:
150
- this.$ = [$$[$0]];
194
+ case 40: case 41:
195
+ this.$ = {label: $$[$0-2], exp: $$[$0]};
151
196
  break;
152
- case 27:
153
- this.$ = [].concat($$[$0-2],$$[$0]);
197
+ case 42:
198
+ this.$ = [];
154
199
  break;
155
200
  }
156
201
  },
157
- table: [{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,9:1,10:2,12:3,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7},{1:[3]},{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,11:[1,15],12:16,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7},o($V8,[2,5]),{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:20,12:3,13:$V3,14:17,15:[2,18],16:$V4,19:$V5,21:$V6,23:$V7,24:18,25:19},{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:23,12:3,13:$V3,16:$V4,17:21,18:$V9,19:$V5,21:$V6,23:$V7,27:22},{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:23,12:3,13:$V3,16:$V4,17:24,19:$V5,20:$V9,21:$V6,23:$V7,27:22},o($V8,$Va),{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:26,12:3,13:$V3,16:$V4,19:$V5,21:$V6,22:[1,25],23:$V7},o($V8,$Vb),o($V8,[2,14]),{3:29,4:$V0,5:28,6:$V1,7:27,8:$V2},o($Vc,[2,1]),o($Vc,[2,2]),o($V8,[2,3]),{1:[2,4]},o($V8,[2,6]),{15:[1,30]},{15:[2,19],26:[1,31]},o($Vd,[2,20]),{3:32,4:$V0,5:33,6:$V1,7:10,8:$V2,12:16,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7},{18:[1,34]},o([18,20],[2,25],{26:[1,35]}),o($Ve,[2,26],{3:7,5:9,7:10,12:16,4:$V0,6:$V1,8:$V2,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7}),{20:[1,36]},o($V8,[2,11]),{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,12:16,13:$V3,16:$V4,19:$V5,21:$V6,22:[1,37],23:$V7},o($V8,[2,15]),o($V8,[2,16]),o($V8,[2,17]),o($V8,[2,7]),{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:20,12:3,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7,25:38},o($Vf,$Va,{15:$Vg,26:$Vg}),o($Vf,$Vb,{15:$Vh,26:$Vh}),o($V8,[2,8]),{3:7,4:$V0,5:9,6:$V1,7:10,8:$V2,10:39,12:3,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7},o($V8,[2,9]),o($V8,[2,12]),o($Vd,[2,21]),o($Ve,[2,27],{3:7,5:9,7:10,12:16,4:$V0,6:$V1,8:$V2,13:$V3,16:$V4,19:$V5,21:$V6,23:$V7})],
158
- defaultActions: {15:[2,4]},
202
+ table: [o($V0,[2,5],{9:1,10:2}),{1:[3]},{3:4,4:$V1,5:12,6:$V2,7:13,8:$V3,11:3,15:[1,5],17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,12:[1,17],15:$V9,17:$V4,20:$V5,22:$V6,28:18,31:$V7,33:$V8},o($Va,$Vb,{13:[1,21]}),{3:22,4:$V1,16:23,17:$Vc,20:$Vd,22:$Ve},o($Vf,[2,20]),o([4,6,8,12,13,14,15,17,19,20,21,22,23,26,27,31,32,33],[2,1]),{3:31,4:$V1,5:32,6:$V2,7:13,8:$V3,11:30,15:$V9,17:$V4,19:[2,34],20:$V5,22:$V6,28:6,29:27,31:$V7,33:$V8,34:28,35:29},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:35,15:$V9,17:$V4,20:$V5,21:$Vg,22:$V6,28:6,30:33,31:$V7,33:$V8,36:34},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:35,15:$V9,17:$V4,20:$V5,22:$V6,23:$Vg,28:6,30:36,31:$V7,33:$V8,36:34},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:38,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,32:[1,37],33:$V8},o($Vf,$Vh),o($Vf,[2,29]),{3:41,4:$V1,5:40,6:$V2,7:39,8:$V3},o([4,6,8,12,14,15,17,19,20,21,22,23,26,27,31,32,33],[2,2]),o($Vf,[2,3]),{1:[2,4]},o($Vf,[2,21]),o($Vf,$Vb),{3:42,4:$V1,16:23,17:$Vc,20:$Vd,22:$Ve},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:43,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8},o($Va,$Vi,{13:[1,44]}),o($Vf,[2,33]),{3:49,4:$V1,5:50,6:$V2,16:48,17:$Vc,18:45,19:$Vj,20:$Vd,22:$Ve,24:46,25:47},{3:42,4:$V1,16:51,17:$Vc,20:$Vd,22:$Ve},{3:49,4:$V1,5:50,6:$V2,16:48,17:$Vc,18:52,20:$Vd,22:$Ve,23:$Vj,24:46,25:47},{19:[1,53]},{19:[2,35],26:[1,54]},o($Vk,[2,36]),{3:55,4:$V1,5:56,6:$V2,7:13,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,28:18,31:$V7,33:$V8},o($V0,$Vb,{27:[1,57]}),o($V0,$Vh,{27:[1,58]}),{21:[1,59]},o([21,23],[2,43],{26:[1,60]}),o($Vl,[2,44],{5:12,7:13,28:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,31:$V7,33:$V8}),{23:[1,61]},o($Vf,[2,26]),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,28:18,31:$V7,32:[1,62],33:$V8},o($Vf,[2,30]),o($Vf,[2,31]),o($Vf,[2,32]),o($Vf,$Vi),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,14:[1,63],15:$V9,17:$V4,20:$V5,22:$V6,28:18,31:$V7,33:$V8},{3:42,4:$V1,16:64,17:$Vc,20:$Vd,22:$Ve},{19:[1,65]},o([19,23],[2,13],{26:[1,66]}),o($Vm,[2,14]),{3:67,4:$V1,5:68,6:$V2},o([4,6],$Vi,{27:[1,69]}),{27:[1,70]},{21:[1,71]},{23:[1,72]},o($Vf,[2,22]),{3:31,4:$V1,5:32,6:$V2,7:13,8:$V3,11:30,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8,35:73},o($V0,$Vb,{19:$Vn,26:$Vn}),o($V0,$Vh,{19:$Vo,26:$Vo}),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:74,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:75,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8},o($Vf,[2,23]),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:76,15:$V9,17:$V4,20:$V5,22:$V6,28:6,31:$V7,33:$V8},o($Vf,[2,24]),o($Vf,[2,27]),o($V0,[2,6]),{14:[1,77]},o($Vf,[2,9]),{3:49,4:$V1,5:50,6:$V2,16:48,17:$Vc,20:$Vd,22:$Ve,25:78},o($Vm,[2,16]),o($Vm,[2,17]),{3:42,4:$V1,16:79,17:$Vc,20:$Vd,22:$Ve},{3:42,4:$V1,16:80,17:$Vc,20:$Vd,22:$Ve},o($Vf,[2,10]),o($Vf,[2,11]),o($Vk,[2,37]),o($Vk,[2,40],{5:12,7:13,28:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,31:$V7,33:$V8}),o($Vk,[2,41],{5:12,7:13,28:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,31:$V7,33:$V8}),o($Vl,[2,45],{5:12,7:13,28:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,17:$V4,20:$V5,22:$V6,31:$V7,33:$V8}),o($V0,[2,7]),o($Vm,[2,15]),o($Vm,[2,18]),o($Vm,[2,19])],
203
+ defaultActions: {17:[2,4]},
159
204
  parseError: function parseError (str, hash) {
160
205
  if (hash.recoverable) {
161
206
  this.trace(str);
@@ -641,38 +686,46 @@ case 1:/* one line comment */
641
686
  break;
642
687
  case 2:/* blanks */
643
688
  break;
644
- case 3:return 19;
689
+ case 3:return 22;
690
+ break;
691
+ case 4:return 17;
692
+ break;
693
+ case 5:return 20;
694
+ break;
695
+ case 6:return 31;
696
+ break;
697
+ case 7:return 23;
645
698
  break;
646
- case 4:return 13;
699
+ case 8:return 19;
647
700
  break;
648
- case 5:return 16;
701
+ case 9:return 21;
649
702
  break;
650
- case 6:return 21;
703
+ case 10:return 32;
651
704
  break;
652
- case 7:return 20;
705
+ case 11:return 13;
653
706
  break;
654
- case 8:return 15;
707
+ case 12:return 33;
655
708
  break;
656
- case 9:return 18;
709
+ case 13:return 26;
657
710
  break;
658
- case 10:return 22;
711
+ case 14:return 14;
659
712
  break;
660
- case 11:return 23;
713
+ case 15:return 27;
661
714
  break;
662
- case 12:return 26;
715
+ case 16:return 15;
663
716
  break;
664
- case 13:return 6
717
+ case 17:return 6
665
718
  break;
666
- case 14:return 4;
719
+ case 18:return 4;
667
720
  break;
668
- case 15:return 8;
721
+ case 19:return 8;
669
722
  break;
670
- case 16:return 11;
723
+ case 20:return 12;
671
724
  break;
672
725
  }
673
726
  },
674
- rules: [/^(?:[/][*]([*][^/]|[^*])*[*][/])/,/^(?:(\/\/|#|%|--)[^\n]*)/,/^(?:\s+)/,/^(?:<)/,/^(?:\{)/,/^(?:\[)/,/^(?:\()/,/^(?:>)/,/^(?:\})/,/^(?:\])/,/^(?:\))/,/^(?:\.)/,/^(?:,)/,/^(?:"[^\"\n]*"|'[^\'\n]*')/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/,/^(?:0|[-]?[1-9][0-9]*)/,/^(?:$)/],
675
- conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"inclusive":true}}
727
+ rules: [/^(?:[/][*]([*][^/]|[^*])*[*][/])/,/^(?:(\/\/|#|%|--)[^\n]*)/,/^(?:\s+)/,/^(?:<)/,/^(?:\{)/,/^(?:\[)/,/^(?:\()/,/^(?:>)/,/^(?:\})/,/^(?:\])/,/^(?:\))/,/^(?:=)/,/^(?:\.)/,/^(?:,)/,/^(?:;)/,/^(?::)/,/^(?:\$)/,/^(?:"[^\"\n]*"|'[^\'\n]*')/,/^(?:[a-zA-Z_][a-zA-Z0-9_?!]*)/,/^(?:0|[-]?[1-9][0-9]*)/,/^(?:$)/],
728
+ conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"inclusive":true}}
676
729
  });
677
730
  return lexer;
678
731
  })();
package/pow.k ADDED
@@ -0,0 +1,7 @@
1
+
2
+ pow =
3
+ < [(), 0] EQ 1,
4
+ [[(), -1] PLUS pow, ()] TIMES
5
+ >;
6
+
7
+ pow