@fraczak/k 1.1.4 → 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.
- package/{bnat.k → Examples/bnat.k} +0 -0
- package/{code.k → Examples/code.k} +3 -1
- package/{error.k → Examples/error.k} +0 -0
- package/{factorial.k → Examples/factorial.k} +3 -2
- package/Examples/fib.k +17 -0
- package/{pow.k → Examples/pow.k} +0 -0
- package/Examples/rec-code.k +80 -0
- package/{test.k → Examples/test.k} +0 -0
- package/{typed-fib.k → Examples/typed-fib.k} +0 -0
- package/package.json +6 -7
- package/parser.jison +12 -13
- package/parser.js +50 -52
- package/repl.coffee +23 -0
- package/repl.js +43 -0
- package/repl.sh +44 -0
- package/run.coffee +7 -1
- package/run.js +10 -1
- package/test.coffee +2 -0
- package/fib.k +0 -15
|
File without changes
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
inc = [(),1] PLUS;
|
|
2
|
-
max = <GT .0, .1>; --
|
|
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
|
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
|
package/{pow.k → Examples/pow.k}
RENAMED
|
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/package.json
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fraczak/k",
|
|
3
|
-
"version": "1.
|
|
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
|
-
|
|
9
|
-
"all": "
|
|
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
|
|
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
|
-
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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,
|
|
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,"
|
|
79
|
-
terminals_: {2:"error",4:"NAME",6:"STRING",8:"INT",12:"EOF",13:"EQ",14:"SC",15:"DOLLAR",
|
|
80
|
-
productions_: [0,[3,1],[5,1],[7,1],[9,3],[10,0],[10,5],[10,6],[
|
|
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.$ =
|
|
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: "
|
|
118
|
+
this.$ = {code: "product", product: $$[$0-1]};
|
|
123
119
|
break;
|
|
124
120
|
case 11:
|
|
125
|
-
this.$ = {code: "
|
|
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:
|
|
135
|
-
this.$ =
|
|
126
|
+
case 13:
|
|
127
|
+
this.$ = {}
|
|
136
128
|
break;
|
|
137
|
-
case 14:
|
|
138
|
-
this.$ =
|
|
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
|
|
141
|
+
case 17: case 18:
|
|
144
142
|
this.$ = {label: $$[$0], code: $$[$0-1]};
|
|
145
143
|
break;
|
|
146
|
-
case
|
|
144
|
+
case 19: case 20:
|
|
147
145
|
this.$ = {label: $$[$0-2], code: $$[$0]};
|
|
148
146
|
break;
|
|
149
|
-
case
|
|
147
|
+
case 22:
|
|
150
148
|
this.$ = s.comp($$[$0-1], $$[$0]);
|
|
151
149
|
break;
|
|
152
|
-
case
|
|
150
|
+
case 23:
|
|
153
151
|
this.$ = $$[$0-1];
|
|
154
152
|
break;
|
|
155
|
-
case
|
|
153
|
+
case 24:
|
|
156
154
|
this.$ = {op: "vector", vector: $$[$0-1]};
|
|
157
155
|
break;
|
|
158
|
-
case
|
|
156
|
+
case 25:
|
|
159
157
|
this.$ = s.union($$[$0-1]);
|
|
160
158
|
break;
|
|
161
|
-
case
|
|
159
|
+
case 26:
|
|
162
160
|
this.$ = {op: "ref", ref: $$[$0]};
|
|
163
161
|
break;
|
|
164
|
-
case
|
|
162
|
+
case 27:
|
|
165
163
|
this.$ = s.identity;
|
|
166
164
|
break;
|
|
167
|
-
case
|
|
165
|
+
case 28:
|
|
168
166
|
this.$ = $$[$0-1];
|
|
169
167
|
break;
|
|
170
|
-
case
|
|
168
|
+
case 29:
|
|
171
169
|
this.$ = {op: "str", str: $$[$0]};
|
|
172
170
|
break;
|
|
173
|
-
case
|
|
171
|
+
case 30:
|
|
174
172
|
this.$ = {op: "int", int: $$[$0]};
|
|
175
173
|
break;
|
|
176
|
-
case
|
|
174
|
+
case 31: case 32: case 33:
|
|
177
175
|
this.$ = {op: "dot", dot: $$[$0]};
|
|
178
176
|
break;
|
|
179
|
-
case
|
|
177
|
+
case 34:
|
|
180
178
|
this.$ = {op: "code", code: s.as_ref($$[$0])};
|
|
181
179
|
break;
|
|
182
|
-
case
|
|
180
|
+
case 35:
|
|
183
181
|
this.$ = {op: "product", product: []};
|
|
184
182
|
break;
|
|
185
|
-
case
|
|
183
|
+
case 37:
|
|
186
184
|
this.$ = {op: "product", product: [$$[$0]]};
|
|
187
185
|
break;
|
|
188
|
-
case
|
|
186
|
+
case 38:
|
|
189
187
|
$$[$0-2].product = [].concat($$[$0-2].product,$$[$0]); this.$ = $$[$0-2];
|
|
190
188
|
break;
|
|
191
|
-
case
|
|
189
|
+
case 39: case 40:
|
|
192
190
|
this.$ = {label: $$[$0], exp: $$[$0-1]};
|
|
193
191
|
break;
|
|
194
|
-
case
|
|
192
|
+
case 41: case 42:
|
|
195
193
|
this.$ = {label: $$[$0-2], exp: $$[$0]};
|
|
196
194
|
break;
|
|
197
|
-
case
|
|
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],
|
|
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
|
|
687
|
+
case 3:return 23;
|
|
690
688
|
break;
|
|
691
|
-
case 4:return
|
|
689
|
+
case 4:return 18;
|
|
692
690
|
break;
|
|
693
|
-
case 5:return
|
|
691
|
+
case 5:return 21;
|
|
694
692
|
break;
|
|
695
|
-
case 6:return
|
|
693
|
+
case 6:return 32;
|
|
696
694
|
break;
|
|
697
|
-
case 7:return
|
|
695
|
+
case 7:return 24;
|
|
698
696
|
break;
|
|
699
|
-
case 8:return
|
|
697
|
+
case 8:return 20;
|
|
700
698
|
break;
|
|
701
|
-
case 9:return
|
|
699
|
+
case 9:return 22;
|
|
702
700
|
break;
|
|
703
|
-
case 10:return
|
|
701
|
+
case 10:return 33;
|
|
704
702
|
break;
|
|
705
703
|
case 11:return 13;
|
|
706
704
|
break;
|
|
707
|
-
case 12:return
|
|
705
|
+
case 12:return 34;
|
|
708
706
|
break;
|
|
709
|
-
case 13:return
|
|
707
|
+
case 13:return 27;
|
|
710
708
|
break;
|
|
711
709
|
case 14:return 14;
|
|
712
710
|
break;
|
|
713
|
-
case 15:return
|
|
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) ->
|
|
@@ -116,5 +123,4 @@ run = (exp, value) ->
|
|
|
116
123
|
else
|
|
117
124
|
console.log exp.op
|
|
118
125
|
|
|
119
|
-
|
|
120
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]) {
|
package/test.coffee
CHANGED
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
|