constructor(ast) {
        if (ast === null) {
            throw new Error(`Invalid AST`);
        }

        // return this.evaluate(ast);
    }
Recursively evaluate the abstract syntax tree (AST) and return the result for the given sub-tree