Skip to content

Commit 2071c0f

Browse files
committed
update and add bin
1 parent 6c8fa4c commit 2071c0f

5 files changed

Lines changed: 59 additions & 43 deletions

File tree

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66

77
```
88
print_range = λ(a, b) if a <= b {
9-
print(a);
9+
println(a);
1010
if a + 1 <= b {
11-
print(", ");
1211
print_range(a + 1, b);
1312
}
1413
else
@@ -18,7 +17,16 @@ print_range(1, 10);
1817
```
1918
output:
2019
```
21-
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
20+
1
21+
2
22+
3
23+
4
24+
5
25+
6
26+
7
27+
8
28+
9
29+
10
2230
***Result: false
2331
```
2432

bin/lambda

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env node
2+
3+
let InputStream = require('../src/InputStream')
4+
let TokenStream = require('../src/TokenStream')
5+
let parser = require('../src/parser')
6+
let Environment = require('../src/Environment')
7+
8+
const fs = require('fs')
9+
10+
let args = process.argv
11+
code = fs.readFileSync(args[2]).toString()
12+
13+
let globalEnv = new Environment()
14+
ast = parser(TokenStream(InputStream(code)))
15+
16+
globalEnv.def('println', (val) => {
17+
console.log(val)
18+
})
19+
20+
// globalEnv.def('readFileSync', ())
21+
22+
Environment.evaluate(ast, globalEnv)

demo

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
print_range = λ(a, b) if a <= b {
2+
println(a);
3+
if a + 1 <= b {
4+
print_range(a + 1, b);
5+
}
6+
else
7+
println("");
8+
};
9+
print_range(1, 10);
10+
11+
cons = λ(a, b) λ(f) f(a, b);
12+
car = λ(cell) cell(λ(a, b) a);
13+
cdr = λ(cell) cell(λ(a, b) b);
14+
NIL = λ(f) f(NIL, NIL);
15+
16+
x = cons(1, cons(2, cons(3, cons(4, cons(5, NIL)))));
17+
println(car(x)); # 1
18+
println(car(cdr(x))); # 2
19+
println(car(cdr(cdr(x)))); # 3
20+
println(car(cdr(cdr(cdr(x))))); # 4
21+
println(car(cdr(cdr(cdr(cdr(x)))))); # 5

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "implement-a-pl",
3-
"version": "0.0.1",
3+
"version": "0.1.0",
44
"description": "compiler",
55
"main": "index.js",
66
"scripts": {
7-
"test": "test"
7+
"test": "node ./bin/lambda ./demo"
88
},
99
"keywords": [
1010
"compiler"

src/Environment.js

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class Environment {
9696
}
9797
}
9898

99+
Environment.evaluate = evaluate
99100

100101

101102

@@ -292,41 +293,5 @@ function makeLambda(expr, env) {
292293
}
293294
}
294295

295-
// Primitive functions
296-
297-
// let code = 'sum = λ(x, y) x + y; println(sum(2, 3.5));'
298-
let code =
299-
`
300-
# demo1
301-
print_range = λ(a, b) if a <= b {
302-
println(a);
303-
if a + 1 <= b {
304-
print_range(a + 1, b);
305-
}
306-
else
307-
println("");
308-
};
309-
print_range(1, 100);
310-
311-
# demo2
312-
cons = λ(a, b) λ(f) f(a, b);
313-
car = λ(cell) cell(λ(a, b) a);
314-
cdr = λ(cell) cell(λ(a, b) b);
315-
NIL = λ(f) f(NIL, NIL);
316-
317-
x = cons(1, cons(2, cons(3, cons(4, cons(5, NIL)))));
318-
println(car(x)); # 1
319-
println(car(cdr(x))); # 2
320-
println(car(cdr(cdr(x)))); # 3
321-
println(car(cdr(cdr(cdr(x))))); # 4
322-
println(car(cdr(cdr(cdr(cdr(x)))))); # 5
323-
`
324-
let ast = parser(TokenStream(InputStream(code)))
325-
326-
let globalEnv = new Environment()
327-
328-
globalEnv.def('println', (val) => {
329-
console.log(val)
330-
})
331-
332-
evaluate(ast, globalEnv)
296+
module.exports = Environment
297+
// Primitive functions

0 commit comments

Comments
 (0)