use AST to evaluate