@fraczak/k 1.1.3 → 1.2.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.
File without changes
@@ -1,5 +1,7 @@
1
1
  inc = [(),1] PLUS;
2
- max = <GT .0, .1>; -- max = < SNOC [.0, .1 max] <GT .0, .1>, .0 >;
2
+ max = <GT .0, .1>; -- select max from vector of two
3
+ -- Finding a max in any vector would be:
4
+ -- max = < SNOC [.0, .1 max] <GT .0, .1>, .0 >;
3
5
  $tree = < string leaf, {tree left, tree right} tree>;
4
6
  height = $tree <
5
7
  .leaf 0,
File without changes
@@ -4,8 +4,9 @@
4
4
  -- {"x":5,"x!":120}
5
5
 
6
6
  dec = [(),1] MINUS;
7
+ zero? = [(),0] EQ;
7
8
  factorial = <
8
- [1,()] GT 1,
9
+ zero? 1,
9
10
  [dec factorial, ()] TIMES
10
11
  >;
11
- { x: (), "x!": factorial }
12
+ { () x, factorial "x!" }
package/Examples/fib.k ADDED
@@ -0,0 +1,17 @@
1
+ pos? = [(), 0] GT .0;
2
+ dec = [(), -1] PLUS;
3
+ fib_aux =
4
+ <
5
+ { .n pos? dec n,
6
+ ."fib(n),fib(n-1),..." [[.0,.1] PLUS, ()] CONS "fib(n),fib(n-1),..."
7
+ } fib_aux,
8
+ ."fib(n),fib(n-1),..."
9
+ >
10
+ ;
11
+
12
+ fib = {() n, [1,1] "fib(n),fib(n-1),..."}
13
+ fib_aux _log! .0;
14
+
15
+ ----------------------
16
+
17
+ fib
File without changes
@@ -0,0 +1,80 @@
1
+ $ t = < { t l, int v, t r } t, {} _ >;
2
+
3
+ t =
4
+ $ {t l, int v, t r}
5
+ {() t}
6
+ $ t
7
+ ;
8
+
9
+ empty = {{} _} $t;
10
+
11
+ leave =
12
+ $ int
13
+ { empty l,
14
+ () v,
15
+ empty r
16
+ } t
17
+ $ t
18
+ ;
19
+
20
+ sort =
21
+ $ [ int ]
22
+ <
23
+ SNOC { .0 x, .1 sort t } insert,
24
+ { empty l, .0 v, empty r } t,
25
+ empty
26
+ >
27
+ $ t
28
+ ;
29
+
30
+ insert =
31
+ $ { int x, t t }
32
+ <
33
+ [.t._ , .x leave ] .1,
34
+ [[.x, .t.t.v] GT .0, .t.t]
35
+ {
36
+ .1.l l,
37
+ .1.v v,
38
+ {.0 x, .1.r t} insert r
39
+ } t,
40
+ {
41
+ {.x x, .t.t.l t} insert l,
42
+ .t.t.v v,
43
+ .t.t.r r
44
+ } t
45
+ >
46
+ $ t
47
+ ;
48
+
49
+ inc = $int [(),1] PLUS $int;
50
+ len =
51
+ < SNOC .1 len inc,
52
+ .0 1,
53
+ 0
54
+ >
55
+ ;
56
+
57
+ concat =
58
+ $ [ [ int ] ]
59
+ <
60
+ SNOC
61
+ < [.0 SNOC, .1] [.0.0, [.0.1, .1] CONS concat ] CONS,
62
+ [.0.0, .1 concat] CONS,
63
+ .1 concat
64
+ >,
65
+ .0,
66
+ []
67
+ >
68
+ $ [ int ]
69
+ ;
70
+
71
+ toVector =
72
+ $ t
73
+ < ._ [],
74
+ .t [.l toVector, [.v], .r toVector] concat
75
+ >
76
+ $ [ int ]
77
+ ;
78
+
79
+ [len, sort toVector]
80
+
File without changes
File without changes
package/codes.coffee CHANGED
@@ -102,7 +102,7 @@ normalizeAll = (codes,representatives) ->
102
102
  normalized[name] = { code: code.code }
103
103
  normalized[name][code.code] = normalize code[code.code], representatives
104
104
  when "vector"
105
- normalized[name] = {code:"vector", vector: representatives[code.vector]}
105
+ normalized[name] = {code:"vector", vector: representatives[code.vector] ? code.vector}
106
106
 
107
107
  normalized
108
108
  , {}
package/codes.js CHANGED
@@ -156,6 +156,7 @@
156
156
  return normalized = names.reduce(function(normalized, name) {
157
157
  if (name === representatives[name]) {
158
158
  (function(code) {
159
+ var ref;
159
160
  switch (code.code) {
160
161
  case "union":
161
162
  case "product":
@@ -166,7 +167,7 @@
166
167
  case "vector":
167
168
  return normalized[name] = {
168
169
  code: "vector",
169
- vector: representatives[code.vector]
170
+ vector: (ref = representatives[code.vector]) != null ? ref : code.vector
170
171
  };
171
172
  }
172
173
  })(codes[name]);
package/package.json CHANGED
@@ -1,23 +1,22 @@
1
1
  {
2
2
  "name": "@fraczak/k",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
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
- "prepublishOnly": "coffee -c *.coffee; echo '#!/usr/bin/env node' | cat - k.js > k.sh",
9
- "all": "npm run prepublishOnly; npm run prepare; npm run prepublishOnly",
8
+ "prepublishOnly": "coffee -c *.coffee; echo '#!/usr/bin/env node' | cat - k.js > k.sh; echo '#!/usr/bin/env node' | cat - repl.js > repl.sh;",
9
+ "all": "coffee -c *.coffee; npm run prepare; npm run prepublishOnly",
10
10
  "test": "coffee -c symbol-table.coffee; jison parser.jison; coffee test.coffee"
11
11
  },
12
12
  "author": "Wojciech Fraczak",
13
13
  "license": "ISC",
14
14
  "bin": {
15
- "k": "./k.sh"
15
+ "k": "./k.sh",
16
+ "k-repl": "./repl.sh"
16
17
  },
17
18
  "devDependencies": {
18
- "jison": "^0.4.18"
19
- },
20
- "dependencies": {
19
+ "jison": "^0.4.18",
21
20
  "coffeescript": "^2.7.0"
22
21
  }
23
22
  }
package/parser.jison CHANGED
@@ -51,27 +51,26 @@ input_with_eof: defs comp EOF {
51
51
 
52
52
  defs: { }
53
53
  | defs name EQ comp SC { s.add_rel($2,$4); }
54
- | defs DOLLAR name EQ code SC { s.add_code($3,$5); }
54
+ | defs DOLLAR name EQ codeDef SC { s.add_code($3,$5); }
55
55
  ;
56
56
 
57
57
  code
58
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
- , {})}; }
59
+ | codeDef { $$ = $1; }
60
+ ;
61
+
62
+ codeDef
63
+ : LC labelled_codes RC { $$ = {code: "product", product: $2}; }
64
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
- , {})}; }
65
+ | LA labelled_codes RA { $$ = {code: "union", union: $2}; }
70
66
  ;
71
67
 
72
68
  labelled_codes
73
- : { $$ = [] }
74
- | non_empty_labelled_codes { $$ = $1; }
69
+ : { $$ = {} }
70
+ | non_empty_labelled_codes { $$ = $1.reduce((r, lc) => {
71
+ r[lc.label] = s.as_ref(lc.code);
72
+ return r }
73
+ , {}); }
75
74
  ;
76
75
 
77
76
  non_empty_labelled_codes
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=[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];
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,18,21,23,32,34],$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,18,21,23,32,34],$Vb=[2,26],$Vc=[1,25],$Vd=[1,26],$Ve=[1,27],$Vf=[4,6,8,12,14,15,18,20,21,22,23,24,27,32,33,34],$Vg=[2,43],$Vh=[2,29],$Vi=[2,8],$Vj=[2,13],$Vk=[20,27],$Vl=[22,24,27],$Vm=[20,24,27],$Vn=[2,39],$Vo=[2,40];
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,"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]],
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,"codeDef":16,"code":17,"LC":18,"labelled_codes":19,"RC":20,"LB":21,"RB":22,"LA":23,"RA":24,"non_empty_labelled_codes":25,"code_label":26,"COMMA":27,"COL":28,"exp":29,"labelled":30,"list":31,"LP":32,"RP":33,"DOT":34,"non_empty_labelled":35,"comp_label":36,"non_empty_list":37,"$accept":0,"$end":1},
79
+ terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",12:"EOF",13:"EQ",14:"SC",15:"DOLLAR",18:"LC",20:"RC",21:"LB",22:"RB",23:"LA",24:"RA",27:"COMMA",28:"COL",32:"LP",33:"RP",34:"DOT"},
80
+ productions_: [0,[3,1],[5,1],[7,1],[9,3],[10,0],[10,5],[10,6],[17,1],[17,1],[16,3],[16,3],[16,3],[19,0],[19,1],[25,1],[25,3],[26,2],[26,2],[26,3],[26,3],[11,1],[11,2],[29,3],[29,3],[29,3],[29,1],[29,2],[29,3],[29,1],[29,1],[29,2],[29,2],[29,2],[29,2],[30,0],[30,1],[35,1],[35,3],[36,2],[36,2],[36,3],[36,3],[31,0],[31,1],[37,1],[37,3]],
81
81
  performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
82
82
  /* this == yyval */
83
83
 
@@ -111,95 +111,93 @@ break;
111
111
  case 8:
112
112
  this.$ = {code: "ref", ref: $$[$0]};
113
113
  break;
114
- case 9:
115
- this.$ = {code: "product",
116
- product: $$[$0-1].reduce((r, lc) => {
117
- r[lc.label] = s.as_ref(lc.code);
118
- return r }
119
- , {})};
114
+ case 9: case 21: case 36: case 44:
115
+ this.$ = $$[$0];
120
116
  break;
121
117
  case 10:
122
- this.$ = {code: "vector", vector: s.as_ref($$[$0-1])};
118
+ this.$ = {code: "product", product: $$[$0-1]};
123
119
  break;
124
120
  case 11:
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
+ this.$ = {code: "vector", vector: s.as_ref($$[$0-1])};
130
122
  break;
131
123
  case 12:
132
- this.$ = []
124
+ this.$ = {code: "union", union: $$[$0-1]};
133
125
  break;
134
- case 13: case 20: case 35: case 43:
135
- this.$ = $$[$0];
126
+ case 13:
127
+ this.$ = {}
136
128
  break;
137
- case 14: case 44:
138
- this.$ = [$$[$0]];
129
+ case 14:
130
+ this.$ = $$[$0].reduce((r, lc) => {
131
+ r[lc.label] = s.as_ref(lc.code);
132
+ return r }
133
+ , {});
139
134
  break;
140
135
  case 15: case 45:
136
+ this.$ = [$$[$0]];
137
+ break;
138
+ case 16: case 46:
141
139
  this.$ = [].concat($$[$0-2],$$[$0]);
142
140
  break;
143
- case 16: case 17:
141
+ case 17: case 18:
144
142
  this.$ = {label: $$[$0], code: $$[$0-1]};
145
143
  break;
146
- case 18: case 19:
144
+ case 19: case 20:
147
145
  this.$ = {label: $$[$0-2], code: $$[$0]};
148
146
  break;
149
- case 21:
147
+ case 22:
150
148
  this.$ = s.comp($$[$0-1], $$[$0]);
151
149
  break;
152
- case 22:
150
+ case 23:
153
151
  this.$ = $$[$0-1];
154
152
  break;
155
- case 23:
153
+ case 24:
156
154
  this.$ = {op: "vector", vector: $$[$0-1]};
157
155
  break;
158
- case 24:
156
+ case 25:
159
157
  this.$ = s.union($$[$0-1]);
160
158
  break;
161
- case 25:
159
+ case 26:
162
160
  this.$ = {op: "ref", ref: $$[$0]};
163
161
  break;
164
- case 26:
162
+ case 27:
165
163
  this.$ = s.identity;
166
164
  break;
167
- case 27:
165
+ case 28:
168
166
  this.$ = $$[$0-1];
169
167
  break;
170
- case 28:
168
+ case 29:
171
169
  this.$ = {op: "str", str: $$[$0]};
172
170
  break;
173
- case 29:
171
+ case 30:
174
172
  this.$ = {op: "int", int: $$[$0]};
175
173
  break;
176
- case 30: case 31: case 32:
174
+ case 31: case 32: case 33:
177
175
  this.$ = {op: "dot", dot: $$[$0]};
178
176
  break;
179
- case 33:
177
+ case 34:
180
178
  this.$ = {op: "code", code: s.as_ref($$[$0])};
181
179
  break;
182
- case 34:
180
+ case 35:
183
181
  this.$ = {op: "product", product: []};
184
182
  break;
185
- case 36:
183
+ case 37:
186
184
  this.$ = {op: "product", product: [$$[$0]]};
187
185
  break;
188
- case 37:
186
+ case 38:
189
187
  $$[$0-2].product = [].concat($$[$0-2].product,$$[$0]); this.$ = $$[$0-2];
190
188
  break;
191
- case 38: case 39:
189
+ case 39: case 40:
192
190
  this.$ = {label: $$[$0], exp: $$[$0-1]};
193
191
  break;
194
- case 40: case 41:
192
+ case 41: case 42:
195
193
  this.$ = {label: $$[$0-2], exp: $$[$0]};
196
194
  break;
197
- case 42:
195
+ case 43:
198
196
  this.$ = [];
199
197
  break;
200
198
  }
201
199
  },
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])],
200
+ 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],18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,12:[1,17],15:$V9,18:$V4,21:$V5,23:$V6,29:18,32:$V7,34:$V8},o($Va,$Vb,{13:[1,21]}),{3:22,4:$V1,16:24,17:23,18:$Vc,21:$Vd,23:$Ve},o($Vf,[2,21]),o([4,6,8,12,13,14,15,18,20,21,22,23,24,27,28,32,33,34],[2,1]),{3:32,4:$V1,5:33,6:$V2,7:13,8:$V3,11:31,15:$V9,18:$V4,20:[2,35],21:$V5,23:$V6,29:6,30:28,32:$V7,34:$V8,35:29,36:30},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:36,15:$V9,18:$V4,21:$V5,22:$Vg,23:$V6,29:6,31:34,32:$V7,34:$V8,37:35},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:36,15:$V9,18:$V4,21:$V5,23:$V6,24:$Vg,29:6,31:37,32:$V7,34:$V8,37:35},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:39,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,33:[1,38],34:$V8},o($Vf,$Vh),o($Vf,[2,30]),{3:42,4:$V1,5:41,6:$V2,7:40,8:$V3},o([4,6,8,12,14,15,18,20,21,22,23,24,27,28,32,33,34],[2,2]),o($Vf,[2,3]),{1:[2,4]},o($Vf,[2,22]),o($Vf,$Vb),{3:43,4:$V1,16:24,17:23,18:$Vc,21:$Vd,23:$Ve},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:44,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8},o($Va,$Vi,{13:[1,45]}),o($Vf,[2,34]),o($Vf,[2,9]),{3:50,4:$V1,5:51,6:$V2,16:24,17:49,18:$Vc,19:46,20:$Vj,21:$Vd,23:$Ve,25:47,26:48},{3:43,4:$V1,16:24,17:52,18:$Vc,21:$Vd,23:$Ve},{3:50,4:$V1,5:51,6:$V2,16:24,17:49,18:$Vc,19:53,21:$Vd,23:$Ve,24:$Vj,25:47,26:48},{20:[1,54]},{20:[2,36],27:[1,55]},o($Vk,[2,37]),{3:56,4:$V1,5:57,6:$V2,7:13,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,29:18,32:$V7,34:$V8},o($V0,$Vb,{28:[1,58]}),o($V0,$Vh,{28:[1,59]}),{22:[1,60]},o([22,24],[2,44],{27:[1,61]}),o($Vl,[2,45],{5:12,7:13,29:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,32:$V7,34:$V8}),{24:[1,62]},o($Vf,[2,27]),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,29:18,32:$V7,33:[1,63],34:$V8},o($Vf,[2,31]),o($Vf,[2,32]),o($Vf,[2,33]),o($Vf,$Vi),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,14:[1,64],15:$V9,18:$V4,21:$V5,23:$V6,29:18,32:$V7,34:$V8},{16:65,18:$Vc,21:$Vd,23:$Ve},{20:[1,66]},o([20,24],[2,14],{27:[1,67]}),o($Vm,[2,15]),{3:68,4:$V1,5:69,6:$V2},o([4,6],$Vi,{28:[1,70]}),{28:[1,71]},{22:[1,72]},{24:[1,73]},o($Vf,[2,23]),{3:32,4:$V1,5:33,6:$V2,7:13,8:$V3,11:31,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8,36:74},o($V0,$Vb,{20:$Vn,27:$Vn}),o($V0,$Vh,{20:$Vo,27:$Vo}),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:75,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8},{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:76,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8},o($Vf,[2,24]),{3:19,4:$V1,5:12,6:$V2,7:13,8:$V3,11:77,15:$V9,18:$V4,21:$V5,23:$V6,29:6,32:$V7,34:$V8},o($Vf,[2,25]),o($Vf,[2,28]),o($V0,[2,6]),{14:[1,78]},o($Vf,[2,10]),{3:50,4:$V1,5:51,6:$V2,16:24,17:49,18:$Vc,21:$Vd,23:$Ve,26:79},o($Vm,[2,17]),o($Vm,[2,18]),{3:43,4:$V1,16:24,17:80,18:$Vc,21:$Vd,23:$Ve},{3:43,4:$V1,16:24,17:81,18:$Vc,21:$Vd,23:$Ve},o($Vf,[2,11]),o($Vf,[2,12]),o($Vk,[2,38]),o($Vk,[2,41],{5:12,7:13,29:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,32:$V7,34:$V8}),o($Vk,[2,42],{5:12,7:13,29:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,32:$V7,34:$V8}),o($Vl,[2,46],{5:12,7:13,29:18,3:19,4:$V1,6:$V2,8:$V3,15:$V9,18:$V4,21:$V5,23:$V6,32:$V7,34:$V8}),o($V0,[2,7]),o($Vm,[2,16]),o($Vm,[2,19]),o($Vm,[2,20])],
203
201
  defaultActions: {17:[2,4]},
204
202
  parseError: function parseError (str, hash) {
205
203
  if (hash.recoverable) {
@@ -686,31 +684,31 @@ case 1:/* one line comment */
686
684
  break;
687
685
  case 2:/* blanks */
688
686
  break;
689
- case 3:return 22;
687
+ case 3:return 23;
690
688
  break;
691
- case 4:return 17;
689
+ case 4:return 18;
692
690
  break;
693
- case 5:return 20;
691
+ case 5:return 21;
694
692
  break;
695
- case 6:return 31;
693
+ case 6:return 32;
696
694
  break;
697
- case 7:return 23;
695
+ case 7:return 24;
698
696
  break;
699
- case 8:return 19;
697
+ case 8:return 20;
700
698
  break;
701
- case 9:return 21;
699
+ case 9:return 22;
702
700
  break;
703
- case 10:return 32;
701
+ case 10:return 33;
704
702
  break;
705
703
  case 11:return 13;
706
704
  break;
707
- case 12:return 33;
705
+ case 12:return 34;
708
706
  break;
709
- case 13:return 26;
707
+ case 13:return 27;
710
708
  break;
711
709
  case 14:return 14;
712
710
  break;
713
- case 15:return 27;
711
+ case 15:return 28;
714
712
  break;
715
713
  case 16:return 15;
716
714
  break;
package/repl.coffee ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env coffee
2
+ k = require "./"
3
+
4
+ do (val = {}, buffer = []) ->
5
+ process.stdin.on 'data', (data) ->
6
+ [first, rest...] = data.toString("utf8").split "\n"
7
+ buffer.push first
8
+ if rest.length > 0
9
+ todo = buffer.join ""
10
+ [rest..., last] = rest
11
+ buffer = [last]
12
+ todo = [todo, rest...]
13
+ for line in todo
14
+ if val is undefined
15
+ val = {}
16
+ if not line.match /^[ \n\t]*(?:#.*)?$/
17
+ try
18
+ val = k.run "#{line} ()", val
19
+ console.log "=> #{JSON.stringify val}"
20
+ catch e
21
+ console.error "ERROR:"
22
+ console.error e
23
+
package/repl.js ADDED
@@ -0,0 +1,43 @@
1
+ // Generated by CoffeeScript 2.7.0
2
+ (function() {
3
+ //!/usr/bin/env coffee
4
+ var k,
5
+ splice = [].splice;
6
+
7
+ k = require("./");
8
+
9
+ (function(val, buffer) {
10
+ return process.stdin.on('data', function(data) {
11
+ var e, first, i, last, len, line, ref, rest, results, todo;
12
+ [first, ...rest] = data.toString("utf8").split("\n");
13
+ buffer.push(first);
14
+ if (rest.length > 0) {
15
+ todo = buffer.join("");
16
+ ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
17
+ buffer = [last];
18
+ todo = [todo, ...rest];
19
+ results = [];
20
+ for (i = 0, len = todo.length; i < len; i++) {
21
+ line = todo[i];
22
+ if (val === void 0) {
23
+ val = {};
24
+ }
25
+ if (!line.match(/^[ \n\t]*(?:#.*)?$/)) {
26
+ try {
27
+ val = k.run(`${line} ()`, val);
28
+ results.push(console.log(`=> ${JSON.stringify(val)}`));
29
+ } catch (error) {
30
+ e = error;
31
+ console.error("ERROR:");
32
+ results.push(console.error(e));
33
+ }
34
+ } else {
35
+ results.push(void 0);
36
+ }
37
+ }
38
+ return results;
39
+ }
40
+ });
41
+ })({}, []);
42
+
43
+ }).call(this);
package/repl.sh ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ // Generated by CoffeeScript 2.7.0
3
+ (function() {
4
+ //!/usr/bin/env coffee
5
+ var k,
6
+ splice = [].splice;
7
+
8
+ k = require("./");
9
+
10
+ (function(val, buffer) {
11
+ return process.stdin.on('data', function(data) {
12
+ var e, first, i, last, len, line, ref, rest, results, todo;
13
+ [first, ...rest] = data.toString("utf8").split("\n");
14
+ buffer.push(first);
15
+ if (rest.length > 0) {
16
+ todo = buffer.join("");
17
+ ref = rest, [...rest] = ref, [last] = splice.call(rest, -1);
18
+ buffer = [last];
19
+ todo = [todo, ...rest];
20
+ results = [];
21
+ for (i = 0, len = todo.length; i < len; i++) {
22
+ line = todo[i];
23
+ if (val === void 0) {
24
+ val = {};
25
+ }
26
+ if (!line.match(/^[ \n\t]*(?:#.*)?$/)) {
27
+ try {
28
+ val = k.run(`${line} ()`, val);
29
+ results.push(console.log(`=> ${JSON.stringify(val)}`));
30
+ } catch (error) {
31
+ e = error;
32
+ console.error("ERROR:");
33
+ results.push(console.error(e));
34
+ }
35
+ } else {
36
+ results.push(void 0);
37
+ }
38
+ }
39
+ return results;
40
+ }
41
+ });
42
+ })({}, []);
43
+
44
+ }).call(this);
package/run.coffee CHANGED
@@ -1,3 +1,5 @@
1
+ fs = require "fs"
2
+
1
3
  valid = (x) ->
2
4
  return undefined if isNaN x
3
5
  return x if x?
@@ -6,6 +8,11 @@ builtin =
6
8
  "_log!": (arg) ->
7
9
  console.log "_log!: #{JSON.stringify arg}"
8
10
  arg
11
+ "fromFILE": (fileName) ->
12
+ fs.readFileSync(fileName).toString()
13
+ "toFILE": ([x,fileName]) ->
14
+ fs.writeFileSync fileName, x
15
+ return x
9
16
  "GT": (args) ->
10
17
  [ok,_] = do ([last,args...] = args) ->
11
18
  args.reduce ([ok,last], x) ->
@@ -49,7 +56,8 @@ codes =
49
56
 
50
57
  verify = (code, value) ->
51
58
  # representatives = run.defs.representatives
52
- # console.log {code,value,representatives}
59
+ # defCodes = JSON.stringify run.defs.codes
60
+ # console.log {code,value, representatives, defCodes}
53
61
  switch code.code
54
62
  when "vector"
55
63
  value.every (x) ->
@@ -115,5 +123,4 @@ run = (exp, value) ->
115
123
  else
116
124
  console.log exp.op
117
125
 
118
-
119
126
  module.exports = run
package/run.js CHANGED
@@ -1,8 +1,10 @@
1
1
  // Generated by CoffeeScript 2.7.0
2
2
  (function() {
3
- var builtin, codes, run, valid, verify,
3
+ var builtin, codes, fs, run, valid, verify,
4
4
  modulo = function(a, b) { return (+a % (b = +b) + b) % b; };
5
5
 
6
+ fs = require("fs");
7
+
6
8
  valid = function(x) {
7
9
  if (isNaN(x)) {
8
10
  return void 0;
@@ -17,6 +19,13 @@
17
19
  console.log(`_log!: ${JSON.stringify(arg)}`);
18
20
  return arg;
19
21
  },
22
+ "fromFILE": function(fileName) {
23
+ return fs.readFileSync(fileName).toString();
24
+ },
25
+ "toFILE": function([x, fileName]) {
26
+ fs.writeFileSync(fileName, x);
27
+ return x;
28
+ },
20
29
  "GT": function(args) {
21
30
  var _, ok;
22
31
  [ok, _] = (function([last, ...args]) {
@@ -112,7 +121,8 @@
112
121
 
113
122
  verify = function(code, value) {
114
123
  // representatives = run.defs.representatives
115
- // console.log {code,value,representatives}
124
+ // defCodes = JSON.stringify run.defs.codes
125
+ // console.log {code,value, representatives, defCodes}
116
126
  switch (code.code) {
117
127
  case "vector":
118
128
  return value.every(function(x) {
package/test.coffee CHANGED
@@ -48,3 +48,19 @@ console.log ""
48
48
  console.log "k_fn(#{JSON.stringify(data)});"
49
49
  console.log "// RETURNS: #{JSON.stringify k_fn data}"
50
50
  console.log ""
51
+
52
+ k_expression = "$ < < [ int ] ints, [ bool ] bools > list, string None>"
53
+ k_fn = k.compile k_expression
54
+ console.log "var k_fn = k.compile('#{k_expression}');"
55
+ console.log ""
56
+
57
+ [
58
+ {None: "None"}
59
+ {list: {ints: []}}
60
+ {list: {ints: [1,2,3]}}
61
+ ].map (data) ->
62
+ console.log "k_fn(#{JSON.stringify(data)});"
63
+ console.log "// RETURNS: #{JSON.stringify k_fn data}"
64
+ console.log ""
65
+
66
+
package/test.js CHANGED
@@ -116,4 +116,34 @@
116
116
  return console.log("");
117
117
  });
118
118
 
119
+ k_expression = "$ < < [ int ] ints, [ bool ] bools > list, string None>";
120
+
121
+ k_fn = k.compile(k_expression);
122
+
123
+ console.log(`var k_fn = k.compile('${k_expression}');`);
124
+
125
+ console.log("");
126
+
127
+ [
128
+ {
129
+ None: "None"
130
+ },
131
+ {
132
+ list: {
133
+ ints: []
134
+ }
135
+ },
136
+ {
137
+ list: {
138
+ ints: [1,
139
+ 2,
140
+ 3]
141
+ }
142
+ }
143
+ ].map(function(data) {
144
+ console.log(`k_fn(${JSON.stringify(data)});`);
145
+ console.log(`// RETURNS: ${JSON.stringify(k_fn(data))}`);
146
+ return console.log("");
147
+ });
148
+
119
149
  }).call(this);
package/fib.k DELETED
@@ -1,15 +0,0 @@
1
- fib_aux = _log!
2
- <
3
- { [.n, 1] GT [.0,-1] PLUS n,
4
- ."[fib(n),fib(n-1)" [[.0,.1] PLUS, .0] "[fib(n),fib(n-1)"
5
- } fib_aux,
6
- ."[fib(n),fib(n-1)"
7
- >
8
- ;
9
-
10
- fib = {() n, [1,1] "[fib(n),fib(n-1)"}
11
- fib_aux .0;
12
-
13
- ----------------------
14
-
15
- fib