From 01c95f485b294db81f3c99a037e003929f0eb278 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Sun, 20 Sep 2026 23:54:32 +0200 Subject: fix code warnings --- .../kompilator/IRGeneration/IRGenerator.java | 2 +- .../IRGeneration/Instructions/Alloc.java | 3 ++ .../IRGeneration/Instructions/Assign.java | 3 ++ .../kompilator/asmGeneration/AssemblyBuilder.java | 12 ++++---- .../assembleAndLink/AssemblerAndLinker.java | 24 +++++++-------- .../no/eliashaugsbakk/kompilator/parsing/AST.java | 11 +------ .../no/eliashaugsbakk/kompilator/parsing/Type.java | 3 +- .../kompilator/parsing/node/Program.java | 2 +- .../parsing/node/expression/FunctionCall.java | 4 +-- .../node/statement/ExpressionStatement.java | 2 +- .../kompilator/semanticAnalysis/Analyzer.java | 34 +++++----------------- .../kompilator/semanticAnalysis/Symbol.java | 2 +- .../kompilator/tokenization/TokenType.java | 1 - 13 files changed, 40 insertions(+), 63 deletions(-) (limited to 'src/main/java/no/eliashaugsbakk') diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java index f8a5756..657a817 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java @@ -29,7 +29,7 @@ public class IRGenerator { } public List generate() { - Program program = (Program) ast.getRoot(); + Program program = (Program) ast.root(); for (Statement stmt : program.statements) { generateStatement(stmt); diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java index cda3a56..fd6e7b7 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java @@ -1,10 +1,13 @@ package no.eliashaugsbakk.kompilator.IRGeneration.Instructions; +import org.jetbrains.annotations.NotNull; + // allocate a new variable: set x: string = "Hello"; mut y: string?; // // Alloc("x", "string", false, "Hello") // Alloc("y", "string", true, "null") public record Alloc(String name, String type, boolean mutable, String initializer) implements Instruction { @Override + @NotNull public String toString() { return "Alloc[name=" + name + ", type=" + type + ", mutable=" + mutable + ", initializer=\"" + initializer + "\"]"; diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java index 80a6d9e..eb00604 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java @@ -1,9 +1,12 @@ package no.eliashaugsbakk.kompilator.IRGeneration.Instructions; +import org.jetbrains.annotations.NotNull; + // assign a value to a variable: x = "Hello"; // Assign("x", "Hello") public record Assign(String name, String value) implements Instruction { @Override + @NotNull public String toString() { return "Assign[name=" + name + ", value=\"" + value + "\"]"; } diff --git a/src/main/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilder.java b/src/main/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilder.java index 275a683..7137e82 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilder.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilder.java @@ -9,16 +9,16 @@ import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Call; import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Instruction; public class AssemblyBuilder { - Map stringVariables = new HashMap<>(); + final Map stringVariables = new HashMap<>(); record StringVar(String value, boolean mutable) { } - StringBuilder finalAssembly; - StringBuilder text; - StringBuilder rodata; - StringBuilder data; - StringBuilder bss; + final StringBuilder finalAssembly; + final StringBuilder text; + final StringBuilder rodata; + final StringBuilder data; + final StringBuilder bss; private final static String exit = """ mov rax, 60 diff --git a/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java b/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java index 9abbc05..cbf6f5e 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java @@ -6,6 +6,7 @@ import java.io.InputStreamReader; import no.eliashaugsbakk.kompilator.IO.File; import no.eliashaugsbakk.kompilator.IO.FileReaderWriter; import no.eliashaugsbakk.kompilator.IO.FileReaderWriterException; +import no.eliashaugsbakk.kompilator.Main; public class AssemblerAndLinker { private final FileReaderWriter fileReaderWriter; @@ -45,19 +46,18 @@ public class AssemblerAndLinker { } // Clean up - /* - try { - fileReaderWriter.deleteFile(assemblyFileName); - } catch (FileReaderWriterException e) { - IO.println("err: Could not delete assembly file: " + e.getMessage()); - } - try { - fileReaderWriter.deleteFile(assembledFileName); - } catch (FileReaderWriterException e) { - IO.println("err: Could not delete assembled file: " + e.getMessage()); + if (!Main.VERBOSE) { + try { + fileReaderWriter.deleteFile(assemblyFileName); + } catch (FileReaderWriterException e) { + IO.println("err: Could not delete assembly file: " + e.getMessage()); + } + try { + fileReaderWriter.deleteFile(assembledFileName); + } catch (FileReaderWriterException e) { + IO.println("err: Could not delete assembled file: " + e.getMessage()); + } } - - */ } private static void runProcess(ProcessBuilder processBuilder) diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/AST.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/AST.java index ad8a3a2..d628c41 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/AST.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/AST.java @@ -2,14 +2,5 @@ package no.eliashaugsbakk.kompilator.parsing; import no.eliashaugsbakk.kompilator.parsing.node.ASTNode; -public class AST { - private final ASTNode root; - - public AST(ASTNode root) { - this.root = root; - } - - public ASTNode getRoot() { - return root; - } +public record AST(ASTNode root) { } diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/Type.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/Type.java index d660ccd..0a5179c 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/Type.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/Type.java @@ -4,8 +4,7 @@ package no.eliashaugsbakk.kompilator.parsing; public record Type(String name, boolean nullable) { boolean isAssignableTo(Type target) { if (!this.name.equals(target.name)) return false; - if (this.nullable && !target.nullable) return false; - return true; + return !this.nullable || target.nullable; } } diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/Program.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/Program.java index 0c7cd32..d61654f 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/Program.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/Program.java @@ -8,7 +8,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.statement.Statement; * Root node of the AST. Contains all top-level statements. */ public class Program extends ASTNode { - public List statements = new ArrayList<>(); + public final List statements = new ArrayList<>(); public void addStatement(Statement statement) { this.statements.add(statement); diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/FunctionCall.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/FunctionCall.java index 2537d9c..e18063b 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/FunctionCall.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/FunctionCall.java @@ -7,8 +7,8 @@ import no.eliashaugsbakk.kompilator.parsing.Type; * Represents a function call statement (e.g., print("Hello, world")). */ public class FunctionCall extends Expression { - public String functionName; - public List arguments; + public final String functionName; + public final List arguments; public FunctionCall(String functionName, List arguments) { this.functionName = functionName; diff --git a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java index b810a04..e46b691 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java @@ -8,7 +8,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression; * function call. */ public class ExpressionStatement extends Statement { - public Expression expression; + public final Expression expression; public ExpressionStatement(Expression expression) { this.expression = expression; } diff --git a/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Analyzer.java b/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Analyzer.java index 7d301ed..3c775d6 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Analyzer.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Analyzer.java @@ -16,14 +16,14 @@ import no.eliashaugsbakk.kompilator.parsing.node.statement.Statement; public class Analyzer { private final AST ast; - private Map symbolTable = new HashMap<>(); + private final Map symbolTable = new HashMap<>(); public Analyzer(AST ast) { this.ast = ast; } public void analyze() throws SemanticException { - Program program = (Program) ast.getRoot(); + Program program = (Program) ast.root(); for (Statement stmt : program.statements) { analyzeStatement(stmt); @@ -31,14 +31,11 @@ public class Analyzer { } private void analyzeStatement(Statement stmt) throws SemanticException { - if (stmt instanceof ExpressionStatement exprStmt) { - typeOf(exprStmt.expression); - } else if (stmt instanceof Assignment assignment) { - analyzeAssignment(assignment); - } else if (stmt instanceof IdentifierDeclaration decl) { - analyzeIdentifierDeclaration(decl); - } else { - throw new SemanticException("Unrecognized statement"); + switch (stmt) { + case ExpressionStatement exprStmt -> typeOf(exprStmt.expression); + case Assignment assignment -> analyzeAssignment(assignment); + case IdentifierDeclaration decl -> analyzeIdentifierDeclaration(decl); + case null, default -> throw new SemanticException("Unrecognized statement"); } } @@ -102,21 +99,6 @@ public class Analyzer { symbol.initialized = true; } - /** - * Analyzes identifier usage (variable reference). - */ - private void analyzeIdentifier(Identifier identifier) throws SemanticException { - // Check if identifier is declared - if (!symbolTable.containsKey(identifier.name)) { - throw new SemanticException("Identifier does not exist: " + identifier.name); - } - - // Check if identifier is initialized - if (!symbolTable.get(identifier.name).initialized) { - throw new SemanticException("Identifier is not initialized: " + identifier.name); - } - } - /** * Analyzes function call. */ @@ -165,7 +147,7 @@ public class Analyzer { private Type typeOf(Expression expr) throws SemanticException { switch (expr) { case null -> throw new SemanticException("Expression cannot be null"); - case StringLiteral stringLiteral -> { + case StringLiteral _ -> { return new Type("string", false); } case Identifier id -> { diff --git a/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Symbol.java b/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Symbol.java index c86d2f7..425f639 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Symbol.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Symbol.java @@ -5,7 +5,7 @@ import no.eliashaugsbakk.kompilator.parsing.Type; class Symbol { final String name; final Type type; - boolean mutable; + final boolean mutable; boolean initialized; Symbol(String name, Type type, boolean mutable, boolean initialized) { diff --git a/src/main/java/no/eliashaugsbakk/kompilator/tokenization/TokenType.java b/src/main/java/no/eliashaugsbakk/kompilator/tokenization/TokenType.java index 45815e0..40b9d2e 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/tokenization/TokenType.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/tokenization/TokenType.java @@ -1,7 +1,6 @@ package no.eliashaugsbakk.kompilator.tokenization; public enum TokenType { - COMMENT, // // this is a comment KEYWORD, // print, var, if, while, function, etc. IDENTIFIER, // variable_1 STRING_LITERAL, // "Hello, World!" -- cgit v1.2.3