summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-20 23:54:32 +0200
committerElias Haugsbakk <[email protected]>2026-09-20 23:54:32 +0200
commit01c95f485b294db81f3c99a037e003929f0eb278 (patch)
treec20d059988fd728a8211d5feb70310a60db5db9e /src/main/java
parentc5009b0cf424b99ae6d27e14fdd21666500b21b8 (diff)
fix code warnings
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java2
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java3
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java3
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilder.java12
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java24
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/AST.java11
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/Type.java3
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/Program.java2
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/expression/FunctionCall.java4
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/parsing/node/statement/ExpressionStatement.java2
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Analyzer.java34
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/semanticAnalysis/Symbol.java2
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/tokenization/TokenType.java1
13 files changed, 40 insertions, 63 deletions
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<Instruction> 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<String, StringVar> stringVariables = new HashMap<>();
+ final Map<String, StringVar> 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<Statement> statements = new ArrayList<>();
+ public final List<Statement> 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<Expression> arguments;
+ public final String functionName;
+ public final List<Expression> arguments;
public FunctionCall(String functionName, List<Expression> 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<String, Symbol> symbolTable = new HashMap<>();
+ private final Map<String, Symbol> 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");
}
}
@@ -103,21 +100,6 @@ public class Analyzer {
}
/**
- * 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.
*/
private void analyzeFunctionCall(FunctionCall call) throws SemanticException {
@@ -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!"