monna/evaluator/evaluator.go

36 lines
628 B
Go
Raw Normal View History

package evaluator
import (
"monkey/ast"
"monkey/object"
)
func Eval(node ast.Node) object.Object {
switch node := node.(type) {
// Statements
case *ast.Program:
return eval_statements(node.Statements)
case *ast.ExpressionStatement:
return Eval(node.Expression)
// Expressions
case *ast.IntegerLiteral:
return &object.Integer{Value: node.Value}
case *ast.Boolean:
return &object.Boolean{Value: node.Value}
}
return nil
}
func eval_statements(statements []ast.Statement) object.Object {
var result object.Object
for _, statement := range statements {
result = Eval(statement)
}
return result
}