From a6447679032d997d861f4f397ae3e21806726739 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 29 Sep 2015 20:19:28 +0100 Subject: Move Evaluator to its own class --- .../zwobble/couscous/interpreter/Evaluator.java | 41 ++++++++++++++++++++++ .../zwobble/couscous/interpreter/Interpreter.java | 34 ------------------ 2 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 src/main/java/org/zwobble/couscous/interpreter/Evaluator.java diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java new file mode 100644 index 0000000..033bfb8 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -0,0 +1,41 @@ +package org.zwobble.couscous.interpreter; + +import java.util.Map; + +import org.zwobble.couscous.ast.Assignment; +import org.zwobble.couscous.ast.ExpressionNode; +import org.zwobble.couscous.ast.LiteralNode; +import org.zwobble.couscous.ast.VariableReferenceNode; +import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor; +import org.zwobble.couscous.values.InterpreterValue; + +import lombok.val; + +public class Evaluator implements ExpressionNodeVisitor { + private final Map stackFrame; + + public Evaluator(Map stackFrame) { + this.stackFrame = stackFrame; + } + + public InterpreterValue eval(ExpressionNode expression) { + return expression.accept(this); + } + + @Override + public InterpreterValue visit(LiteralNode literal) { + return literal.getValue(); + } + + @Override + public InterpreterValue visit(VariableReferenceNode variableReference) { + return stackFrame.get(variableReference.getReferentId()); + } + + @Override + public InterpreterValue visit(Assignment assignment) { + val value = eval(assignment.getValue()); + stackFrame.put(assignment.getTarget().getReferentId(), value); + return value; + } +} diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java index 49c651b..8bf6479 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java @@ -6,14 +6,9 @@ import java.util.Optional; import java.util.stream.IntStream; import org.zwobble.couscous.Project; -import org.zwobble.couscous.ast.Assignment; -import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.ExpressionStatementNode; -import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodNode; import org.zwobble.couscous.ast.ReturnNode; -import org.zwobble.couscous.ast.VariableReferenceNode; -import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor; import org.zwobble.couscous.ast.visitors.StatementNodeVisitor; import org.zwobble.couscous.values.InterpreterValue; @@ -78,33 +73,4 @@ public class Interpreter { return Optional.empty(); } } - - private class Evaluator implements ExpressionNodeVisitor { - private final Map stackFrame; - - public Evaluator(Map stackFrame) { - this.stackFrame = stackFrame; - } - - public InterpreterValue eval(ExpressionNode expression) { - return expression.accept(this); - } - - @Override - public InterpreterValue visit(LiteralNode literal) { - return literal.getValue(); - } - - @Override - public InterpreterValue visit(VariableReferenceNode variableReference) { - return stackFrame.get(variableReference.getReferentId()); - } - - @Override - public InterpreterValue visit(Assignment assignment) { - val value = eval(assignment.getValue()); - stackFrame.put(assignment.getTarget().getReferentId(), value); - return value; - } - } } -- cgit v1.2.3