|
@@ -1,18 +1,20 @@
|
|
1
|
+const AST = require('../src/ast')
|
|
2
|
+
|
1
|
3
|
module.exports = class Env {
|
2
|
4
|
constructor(parent = null) {
|
3
|
5
|
if (parent) {
|
4
|
6
|
this.data = parent.data
|
5
|
7
|
} else {
|
6
|
8
|
this.data = {
|
7
|
|
- '+': (a, b) => a + b,
|
8
|
|
- '-': (a, b) => a - b,
|
9
|
|
- '*': (a, b) => a * b,
|
10
|
|
- '/': (a, b) => a / b,
|
11
|
|
- '=': (a, b) => a === b,
|
12
|
|
- '>': (a, b) => a > b,
|
13
|
|
- '<': (a, b) => a < b,
|
14
|
|
- '>=': (a, b) => a >= b,
|
15
|
|
- '<=': (a, b) => a <= b,
|
|
9
|
+ '+': (a, b) => new AST.Number({ value: a + b }),
|
|
10
|
+ '-': (a, b) => new AST.Number({ value: a - b }),
|
|
11
|
+ '*': (a, b) => new AST.Number({ value: a * b }),
|
|
12
|
+ '/': (a, b) => new AST.Number({ value: a / b }),
|
|
13
|
+ '=': (a, b) => new AST.Boolean({ value: a === b }),
|
|
14
|
+ '>': (a, b) => new AST.Boolean({ value: a > b }),
|
|
15
|
+ '<': (a, b) => new AST.Boolean({ value: a < b }),
|
|
16
|
+ '>=': (a, b) => new AST.Boolean({ value: a >= b }),
|
|
17
|
+ '<=': (a, b) => new AST.Boolean({ value: a <= b }),
|
16
|
18
|
}
|
17
|
19
|
}
|
18
|
20
|
}
|