aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java41
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Interpreter.java34
2 files changed, 41 insertions, 34 deletions
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<InterpreterValue> {
+ private final Map<Integer, InterpreterValue> stackFrame;
+
+ public Evaluator(Map<Integer, InterpreterValue> 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<InterpreterValue> {
- private final Map<Integer, InterpreterValue> stackFrame;
-
- public Evaluator(Map<Integer, InterpreterValue> 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;
- }
- }
}