From 0533ddbc5d63e3d5ac6f00be7d77bcb33edb402e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krau=C3=9F=2C=20Josefine?= Date: Thu, 4 Jul 2024 11:57:49 +0200 Subject: [PATCH] refactoring --- src/main/java/abstractSyntaxTree/Class/FieldDecl.java | 8 +++----- src/main/java/abstractSyntaxTree/Class/MethodDecl.java | 1 - src/main/java/abstractSyntaxTree/Class/RefType.java | 1 - .../java/abstractSyntaxTree/Datatype/IDatatype.java | 5 ----- .../Expression/BinaryExpression.java | 3 --- .../abstractSyntaxTree/Expression/IExpression.java | 4 ---- src/main/java/abstractSyntaxTree/Program.java | 3 +-- .../abstractSyntaxTree/Statement/BlockStatement.java | 5 +---- .../java/abstractSyntaxTree/Statement/IfStatement.java | 2 -- .../MethodCallStatementExpression.java | 10 ---------- .../StatementExpression/NewStatementExpression.java | 2 +- 11 files changed, 6 insertions(+), 38 deletions(-) diff --git a/src/main/java/abstractSyntaxTree/Class/FieldDecl.java b/src/main/java/abstractSyntaxTree/Class/FieldDecl.java index b6a6945..67306b9 100644 --- a/src/main/java/abstractSyntaxTree/Class/FieldDecl.java +++ b/src/main/java/abstractSyntaxTree/Class/FieldDecl.java @@ -18,9 +18,9 @@ import java.util.Objects; public class FieldDecl extends AbstractType implements Node { - public String type; // from parser - public String identifier;// from parser - public IExpression expression; // value of the field + public String type; + public String identifier; + public IExpression expression; public FieldDecl(String type, String identifier, IExpression expression){ this.type = type; @@ -44,8 +44,6 @@ public class FieldDecl extends AbstractType implements Node { setTypeCheckResult(result); return result; - - //write field table } public void codeGen(ClassWriter cw) { diff --git a/src/main/java/abstractSyntaxTree/Class/MethodDecl.java b/src/main/java/abstractSyntaxTree/Class/MethodDecl.java index 54f38a9..b02020e 100644 --- a/src/main/java/abstractSyntaxTree/Class/MethodDecl.java +++ b/src/main/java/abstractSyntaxTree/Class/MethodDecl.java @@ -35,7 +35,6 @@ public class MethodDecl implements Node { } public TypeCheckResult typeCheck(HashMap>> methodContext, HashMap> typeContext) throws TypeCheckException { - // jede methode als block statement aufrufen und jede neue locale varibale in localvars schreiben List parametersList = parameters.parameterList; for(Parameter parameter : parametersList){ localVars.put(parameter.identifier, parameter.type); diff --git a/src/main/java/abstractSyntaxTree/Class/RefType.java b/src/main/java/abstractSyntaxTree/Class/RefType.java index 580aca9..a1d02c8 100644 --- a/src/main/java/abstractSyntaxTree/Class/RefType.java +++ b/src/main/java/abstractSyntaxTree/Class/RefType.java @@ -68,7 +68,6 @@ public class RefType extends AbstractType implements Node { // type check each method for (MethodDecl methodDecl : methodDecls) { -// methodDecl.classThatContainsMethod = this.name; methodDecl.typeCheck(methodContext, typeContext); } diff --git a/src/main/java/abstractSyntaxTree/Datatype/IDatatype.java b/src/main/java/abstractSyntaxTree/Datatype/IDatatype.java index f0ef832..d4f42ef 100644 --- a/src/main/java/abstractSyntaxTree/Datatype/IDatatype.java +++ b/src/main/java/abstractSyntaxTree/Datatype/IDatatype.java @@ -5,14 +5,9 @@ import TypeCheck.TypeCheckResult; import org.objectweb.asm.MethodVisitor; public interface IDatatype { - // typeCheck method TypeCheckResult typeCheck() throws TypeCheckException; - // visit method for code generation - void codeGen(MethodVisitor mv) throws Exception; TypeCheckResult getTypeCheckResult(); } - -//TODO: Check if we need to differentiate between primitive types and reference types --> for example in "==" \ No newline at end of file diff --git a/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java b/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java index fa491d2..cc4aa81 100644 --- a/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java +++ b/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java @@ -58,9 +58,6 @@ public class BinaryExpression extends AbstractType implements IExpression{ result.type = "int"; } break; - - //case "&" ist für logisches und auf bit level - //case "|" ist für logisches oder auf bit level } setTypeCheckResult(result); diff --git a/src/main/java/abstractSyntaxTree/Expression/IExpression.java b/src/main/java/abstractSyntaxTree/Expression/IExpression.java index 0d51b32..c341203 100644 --- a/src/main/java/abstractSyntaxTree/Expression/IExpression.java +++ b/src/main/java/abstractSyntaxTree/Expression/IExpression.java @@ -10,11 +10,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; public interface IExpression extends Node { - // typeCheck method - //TypeCheckResult typeCheck() throws Exception; TypeCheckResult typeCheck(HashMap>> methodContext, HashMap> typeContext, HashMap localVars) throws TypeCheckException; - - // visit method for code generation void codeGen(MethodVisitor mv, LinkedHashMap localVars, HashMap> typeContext, HashMap>> methodContext) throws Exception; TypeCheckResult getTypeCheckResult(); diff --git a/src/main/java/abstractSyntaxTree/Program.java b/src/main/java/abstractSyntaxTree/Program.java index ee47cc0..b150e1e 100644 --- a/src/main/java/abstractSyntaxTree/Program.java +++ b/src/main/java/abstractSyntaxTree/Program.java @@ -87,7 +87,6 @@ public class Program implements Node { typeContext.put(oneClass.name, classVars); // build method context - HashMap> identifierAndMethod = new HashMap<>(); for (MethodDecl methodDecl : oneClass.methodDecls){ if(methodDecl.returnType == null) continue; @@ -98,8 +97,8 @@ public class Program implements Node { methodContext.put(oneClass.name, identifierAndMethod); } - int mainCounter = 0; // check if main exists + int mainCounter = 0; for(RefType oneClass : classes){ if(oneClass.hasMain) mainCounter++; diff --git a/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java b/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java index e088485..2c241c2 100644 --- a/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java @@ -17,13 +17,10 @@ import java.util.List; import java.util.Objects; public class BlockStatement extends AbstractType implements IStatement { - - //We will need a parameter which holds the symbol table HashMap localVars; - public String returnType; // "not" --> not void + public String returnType; public List statements; public String thisClass; - // do we need expression, statementexpression public BlockStatement(List statements, String returnType) { this.statements = statements; diff --git a/src/main/java/abstractSyntaxTree/Statement/IfStatement.java b/src/main/java/abstractSyntaxTree/Statement/IfStatement.java index 80d47a1..e6e816a 100644 --- a/src/main/java/abstractSyntaxTree/Statement/IfStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/IfStatement.java @@ -14,8 +14,6 @@ import java.util.Objects; public class IfStatement extends AbstractType implements IStatement{ public IExpression condition; - - //Do we need a block statement here? IStatement ifStatement; public String thisClass; diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java index 39ea13f..2f7476d 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java @@ -34,7 +34,6 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr String classToSearchMethodIn = thisClass; - //method is called on something that is not this ??? if (this.receiver != null) { if (!receiver.thisExpression) { classToSearchMethodIn = localVars.get(receiver.identifier); @@ -51,11 +50,7 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr receiver.instVarExpression.thisClass = this.thisClass; String typeOfSubreceiver = receiver.instVarExpression.typeCheck(methodContext, typeContext, localVars).type; - String lastField = receiver.instVarExpression.fieldName; - currentType = typeOfSubreceiver; - - //currentType = typeContext.get(receiver.instVarExpression.getTypeCheckResult().type).get(mostLeftField); } else { currentType = classToSearchMethodIn; } @@ -63,16 +58,11 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr currentType = thisClass; } - //if classToSearchMethodIn does not contain method, throw exception. go through list and check each - for (int i = 0; i < receivingMethods.size(); i++) { currentType = (String) methodContext.get(currentType).get(receivingMethods.get(i).methodName).keySet().toArray()[0]; if (currentType == null) throw new TypeCheckException("The method " + methodName + " was not found in " + classToSearchMethodIn + "."); receivingMethods.get(i).thisClass = this.thisClass; - - // currentType = return type - // ThisClass = class von methode receivingMethods.get(i).checkParameters(methodContext, typeContext, localVars); } currentType = (String) methodContext.get(currentType).get(methodName).keySet().toArray()[0]; diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/NewStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/NewStatementExpression.java index b8a928d..fb2148f 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/NewStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/NewStatementExpression.java @@ -21,7 +21,7 @@ public class NewStatementExpression extends AbstractType implements IExpression, public String thisClass; private String className; - private List arguments; //These need to have a TypeCheckResult + private List arguments; public NewStatementExpression(String className, List arguments) { this.className = className;