evaluator.go 587 B

123456789101112131415161718192021222324252627282930313233
  1. package evaluator
  2. import (
  3. "github/runnignwater/monkey/ast"
  4. "github/runnignwater/monkey/object"
  5. )
  6. func Eval(node ast.Node) object.Object {
  7. switch node := node.(type) {
  8. // Statements
  9. case *ast.Program:
  10. return evalStatements(node.Statements)
  11. case *ast.ExpressionStatement:
  12. return Eval(node.Expression)
  13. // Expression
  14. case *ast.IntegerLiteral:
  15. return &object.Integer{Value: node.Value}
  16. }
  17. return nil
  18. }
  19. func evalStatements(stmts []ast.Statement) object.Object {
  20. var result object.Object
  21. for _, statement := range stmts {
  22. result = Eval(statement)
  23. }
  24. return result
  25. }