summaryrefslogtreecommitdiffstats
path: root/code/Interpreter/Interpreter.java
diff options
context:
space:
mode:
authorAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-06 01:44:14 +0000
committerAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-11-06 01:44:14 +0000
commit0c54d7f8cb4b17d80ed21f7a9916ad27a13e34ed (patch)
treed64267b7da1691bad8797f81188798fb9628a212 /code/Interpreter/Interpreter.java
parentd3c80f8bd236b1b4ed571ed6b347095efdaa99ed (diff)
downloadesotericFORTRAN-0c54d7f8cb4b17d80ed21f7a9916ad27a13e34ed.tar.gz
esotericFORTRAN-0c54d7f8cb4b17d80ed21f7a9916ad27a13e34ed.zip
Re-arranged files and added C compilation
Diffstat (limited to 'code/Interpreter/Interpreter.java')
-rw-r--r--code/Interpreter/Interpreter.java131
1 files changed, 0 insertions, 131 deletions
diff --git a/code/Interpreter/Interpreter.java b/code/Interpreter/Interpreter.java
deleted file mode 100644
index 65cdeb4..0000000
--- a/code/Interpreter/Interpreter.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package Interpreter;
-
-import java.util.List;
-
-import Interpreter.Expression.*;
-import Interpreter.Statement.ExpressionStatement;
-import Interpreter.Statement.PrintStatement;
-import Interpreter.Statement.VariableDeclaration;
-
-public class Interpreter {
-
- private Environment environment = new Environment();
-
- void interpret(List<Statement> statements){
- try{
- for (Statement statement: statements){
- evaluateStatement(statement);
- }
- } catch (Error e){
-
- }
- }
-
- private Object evaluateStatement(Statement statement){
- switch(statement.getStatmentType()){
- case "exprStmt":
- return evalExpressionStatement((ExpressionStatement)statement);
- case "vardec":
- return evalVariableDeclaration((VariableDeclaration)statement);
- case "print":
- return evalPrintStatement((PrintStatement)statement);
- default:
- return null;
- }
- }
- private Object evalExpressionStatement(ExpressionStatement stmt){
- return evaluateExpression(stmt.expr);
- }
-
- private Object evalVariableDeclaration(VariableDeclaration vardec){
- environment.defineVariable(vardec.name.text, null);
- return null;
- }
-
- private Object evalPrintStatement(PrintStatement print){
- System.out.println(evaluateExpression(print.expr));
- return null;
- }
-
- private Object evaluateExpression(Expression expression){
- switch(expression.getExpressionType()){
- case "binary":
- return evaluateBinaryExpression((Binary)expression);
- case "literal":
- return evaluateLiteralExpression((Literal)expression);
- case "bracket":
- return evaluateBracketedExpression((BracketedExpression)expression);
- case "assign":
- return evaluateAssignmentExpression((AssignmentExpression)expression);
- case "var":
- return evaluateVariableExpression((Variable)expression);
- default:
- return null;
- }
- }
-
- private Object evaluateBinaryExpression(Binary expr){
- Object leftEval = evaluateExpression(expr.left);
- Object rightEval = evaluateExpression(expr.right);
- switch (expr.op.type){
- case PLUS:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval + (double)rightEval;
- }
- case STAR:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval * (double)rightEval;
- }
- case MINUS:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval - (double)rightEval;
- }
- case SLASH:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval / (double)rightEval;
- }
-
- case GREATER:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval > (double)rightEval;
- }
- case LESS:
- if (checkOperandsNum(leftEval, leftEval)){
- return (double)leftEval < (double)rightEval;
- }
-
- case EQUALITY:
- return leftEval.equals(rightEval);
- default:
- break;
- }
- return null;
- }
-
- private Object evaluateLiteralExpression(Literal expr){
- return expr.value.value;
- }
-
- private Object evaluateBracketedExpression(BracketedExpression expr){
- return evaluateExpression(expr.expr);
- }
-
- private Object evaluateAssignmentExpression(AssignmentExpression expr){
- Object assignedValue = evaluateExpression(expr.value);
- environment.assignVariable(expr.name.text, assignedValue);
- return null;
- }
-
- private Object evaluateVariableExpression(Variable expr){
- return environment.getVariable(expr.name.text);
- }
-
- private boolean checkOperandsNum(Object left, Object right){
- if (left instanceof Double && right instanceof Double){
- return true;
- } else {
- Language.displayError("Operands must be numbers");
- throw new Error();
- }
- }
-}