123456789101112131415161718192021222324252627282930313233 |
- const AST = require('../src/ast')
-
- module.exports = class Env {
- constructor(parent = null) {
- if (parent) {
- this.data = parent.data
- } else {
- this.data = {
- '+': (a, b) => new AST.Number({ value: a + b }),
- '-': (a, b) => new AST.Number({ value: a - b }),
- '*': (a, b) => new AST.Number({ value: a * b }),
- '/': (a, b) => new AST.Number({ value: a / b }),
- '=': (a, b) => new AST.Boolean({ value: a === b }),
- '>': (a, b) => new AST.Boolean({ value: a > b }),
- '<': (a, b) => new AST.Boolean({ value: a < b }),
- '>=': (a, b) => new AST.Boolean({ value: a >= b }),
- '<=': (a, b) => new AST.Boolean({ value: a <= b }),
- }
- }
- }
-
- get(symbol) {
- if (this.data[symbol]) {
- return this.data[symbol]
- }
-
- throw `Symbol ${symbol} is not bound`
- }
-
- set(symbol, value) {
- this.data[symbol] = value
- }
- }
|