From 1de6add080636f1410e7f763acbf989dbb895ef3 Mon Sep 17 00:00:00 2001 From: i22035 Date: Thu, 4 Jul 2024 20:23:43 +0200 Subject: [PATCH 1/3] Fixe Type Error --- .../java/ast/members/ConstructorNode.java | 1 - src/main/java/semantic/SemanticAnalyzer.java | 8 -------- .../input/endabgabeTests/{ => main}/Main.java | 0 .../{ => working}/Calculation.java | 0 .../{ => working}/EmptyClass.java | 0 .../endabgabeTests/{ => working}/Loops.java | 0 .../input/singleFeatureTests/Null.java | 4 ++-- .../typedAstFeatureTests/CorrectTest.java | 20 ++++++------------- 8 files changed, 8 insertions(+), 25 deletions(-) rename src/test/resources/input/endabgabeTests/{ => main}/Main.java (100%) rename src/test/resources/input/endabgabeTests/{ => working}/Calculation.java (100%) rename src/test/resources/input/endabgabeTests/{ => working}/EmptyClass.java (100%) rename src/test/resources/input/endabgabeTests/{ => working}/Loops.java (100%) diff --git a/src/main/java/ast/members/ConstructorNode.java b/src/main/java/ast/members/ConstructorNode.java index e149fc6..33a0f25 100644 --- a/src/main/java/ast/members/ConstructorNode.java +++ b/src/main/java/ast/members/ConstructorNode.java @@ -14,7 +14,6 @@ public class ConstructorNode extends MethodNode implements Visitable { public AccessModifierNode accessType; public String identifier; public List parameters = new ArrayList<>(); - public BlockNode block; public ConstructorNode(String accessType, String identifier, BlockNode block) { this.accessType = new AccessModifierNode(accessType); diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java index 09ab26b..f930044 100644 --- a/src/main/java/semantic/SemanticAnalyzer.java +++ b/src/main/java/semantic/SemanticAnalyzer.java @@ -114,10 +114,6 @@ public class SemanticAnalyzer implements SemanticVisitor { @Override public TypeCheckResult analyze(MethodNode methodNode) { - if (methodNode instanceof ConstructorNode) { - return new TypeCheckResult(true, new BaseType(TypeEnum.VOID)); - } else { - var valid = true; for (var otherMethod : currentClass.getMethods()) { @@ -159,8 +155,6 @@ public class SemanticAnalyzer implements SemanticVisitor { } return new TypeCheckResult(valid, resultType); - - } } @Override @@ -177,8 +171,6 @@ public class SemanticAnalyzer implements SemanticVisitor { currentFields.put(toCheck.identifier, toCheck.type); } return new TypeCheckResult(true, null); - - } @Override diff --git a/src/test/resources/input/endabgabeTests/Main.java b/src/test/resources/input/endabgabeTests/main/Main.java similarity index 100% rename from src/test/resources/input/endabgabeTests/Main.java rename to src/test/resources/input/endabgabeTests/main/Main.java diff --git a/src/test/resources/input/endabgabeTests/Calculation.java b/src/test/resources/input/endabgabeTests/working/Calculation.java similarity index 100% rename from src/test/resources/input/endabgabeTests/Calculation.java rename to src/test/resources/input/endabgabeTests/working/Calculation.java diff --git a/src/test/resources/input/endabgabeTests/EmptyClass.java b/src/test/resources/input/endabgabeTests/working/EmptyClass.java similarity index 100% rename from src/test/resources/input/endabgabeTests/EmptyClass.java rename to src/test/resources/input/endabgabeTests/working/EmptyClass.java diff --git a/src/test/resources/input/endabgabeTests/Loops.java b/src/test/resources/input/endabgabeTests/working/Loops.java similarity index 100% rename from src/test/resources/input/endabgabeTests/Loops.java rename to src/test/resources/input/endabgabeTests/working/Loops.java diff --git a/src/test/resources/input/singleFeatureTests/Null.java b/src/test/resources/input/singleFeatureTests/Null.java index 1c843fa..0eb2c8a 100644 --- a/src/test/resources/input/singleFeatureTests/Null.java +++ b/src/test/resources/input/singleFeatureTests/Null.java @@ -1,8 +1,8 @@ class Null{ - Null a; + int a; public Null(){ - this.a = null; + this.a = 1; } } \ No newline at end of file diff --git a/src/test/resources/input/typedAstFeatureTests/CorrectTest.java b/src/test/resources/input/typedAstFeatureTests/CorrectTest.java index d5533fd..a83dbbf 100644 --- a/src/test/resources/input/typedAstFeatureTests/CorrectTest.java +++ b/src/test/resources/input/typedAstFeatureTests/CorrectTest.java @@ -1,16 +1,8 @@ -public class Compiler { - Node node; - public int add(int i, int j) { - node = new Node(); - node.x = 1; - return i+j; - } -} - -public class Node { - public int x; - public void main() { - Compiler compiler = new Compiler(); - int i = compiler.add(5, 8); +public class If { + public If() { + int intValue = 5; + if(intValue == 5) { + intValue--; + } } } \ No newline at end of file From 6fa57cf319f5c2cce3f40fcd711c129ef4c399c5 Mon Sep 17 00:00:00 2001 From: i22035 Date: Thu, 4 Jul 2024 20:36:36 +0200 Subject: [PATCH 2/3] Type Error Change --- src/main/java/semantic/SemanticAnalyzer.java | 4 ++++ src/test/resources/input/endabgabeTests/{main => }/Main.java | 0 2 files changed, 4 insertions(+) rename src/test/resources/input/endabgabeTests/{main => }/Main.java (100%) diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java index f930044..828f74e 100644 --- a/src/main/java/semantic/SemanticAnalyzer.java +++ b/src/main/java/semantic/SemanticAnalyzer.java @@ -567,6 +567,10 @@ public class SemanticAnalyzer implements SemanticVisitor { var type = currentFields.get(unary.identifier); unary.setType(type); return new TypeCheckResult(valid,type ); + } else if (unary.value != null) { + var result = unary.value.accept(this); + unary.setType(result.getType()); + return new TypeCheckResult(result.isValid(), result.getType()); } else if (unary.statement != null) { var result = unary.statement.accept(this); unary.setType(result.getType()); diff --git a/src/test/resources/input/endabgabeTests/main/Main.java b/src/test/resources/input/endabgabeTests/Main.java similarity index 100% rename from src/test/resources/input/endabgabeTests/main/Main.java rename to src/test/resources/input/endabgabeTests/Main.java From 195440e9d9929a88915937e5f6b184d2fee7c521 Mon Sep 17 00:00:00 2001 From: i22035 Date: Thu, 4 Jul 2024 20:49:54 +0200 Subject: [PATCH 3/3] Added SemanticAnalyzer ElseIfStatement --- src/main/java/semantic/SemanticAnalyzer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java index 828f74e..c0be3cf 100644 --- a/src/main/java/semantic/SemanticAnalyzer.java +++ b/src/main/java/semantic/SemanticAnalyzer.java @@ -309,9 +309,18 @@ public class SemanticAnalyzer implements SemanticVisitor { @Override public TypeCheckResult analyze(IfElseNode toCheck) { var resultIf = toCheck.ifStatement.accept(this); + var validElseIf = true; + + if(toCheck.elseIfStatements.size() != 0) { + for(IfNode ifNode : toCheck.elseIfStatements) { + var resultIfFor = ifNode.accept(this); + validElseIf = validElseIf && resultIfFor.isValid(); + } + } + if(toCheck.elseStatement != null){ var resultElse = toCheck.elseStatement.accept(this); - return new TypeCheckResult(resultIf.isValid() && resultElse.isValid(), new BaseType(TypeEnum.VOID)); + return new TypeCheckResult(resultIf.isValid() && resultElse.isValid() && validElseIf, new BaseType(TypeEnum.VOID)); }