From 56536cc64b373db7bc5577013c8877662b73f8b6 Mon Sep 17 00:00:00 2001 From: Laborratte5 Date: Sat, 10 May 2025 01:46:13 +0200 Subject: [PATCH] refactor: Use strategy for CodeGenerator backend This makes it easier to switch between the code generator backends which may help debugging. --- src/main/java/edu/kit/kastel/vads/compiler/Main.java | 6 ++++-- .../kastel/vads/compiler/backend/CodeGenerator.java | 11 +++++++++++ .../{CodeGenerator.java => AasmCodeGenerator.java} | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 src/main/java/edu/kit/kastel/vads/compiler/backend/CodeGenerator.java rename src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/{CodeGenerator.java => AasmCodeGenerator.java} (96%) diff --git a/src/main/java/edu/kit/kastel/vads/compiler/Main.java b/src/main/java/edu/kit/kastel/vads/compiler/Main.java index d6034b4..34d208a 100644 --- a/src/main/java/edu/kit/kastel/vads/compiler/Main.java +++ b/src/main/java/edu/kit/kastel/vads/compiler/Main.java @@ -1,6 +1,7 @@ package edu.kit.kastel.vads.compiler; -import edu.kit.kastel.vads.compiler.backend.aasm.CodeGenerator; +import edu.kit.kastel.vads.compiler.backend.CodeGenerator; +import edu.kit.kastel.vads.compiler.backend.aasm.AasmCodeGenerator; import edu.kit.kastel.vads.compiler.ir.IrGraph; import edu.kit.kastel.vads.compiler.ir.SsaTranslation; import edu.kit.kastel.vads.compiler.ir.optimize.LocalValueNumbering; @@ -50,7 +51,8 @@ public class Main { } // TODO: generate assembly and invoke gcc instead of generating abstract assembly - String s = new CodeGenerator().generateCode(graphs); + CodeGenerator generator = new AasmCodeGenerator(); + String s = generator.generateCode(graphs); Files.writeString(output, s); } diff --git a/src/main/java/edu/kit/kastel/vads/compiler/backend/CodeGenerator.java b/src/main/java/edu/kit/kastel/vads/compiler/backend/CodeGenerator.java new file mode 100644 index 0000000..f42ee7b --- /dev/null +++ b/src/main/java/edu/kit/kastel/vads/compiler/backend/CodeGenerator.java @@ -0,0 +1,11 @@ +package edu.kit.kastel.vads.compiler.backend; + +import java.util.List; + +import edu.kit.kastel.vads.compiler.ir.IrGraph; + +public interface CodeGenerator { + + public String generateCode(List program); + +} diff --git a/src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/CodeGenerator.java b/src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/AasmCodeGenerator.java similarity index 96% rename from src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/CodeGenerator.java rename to src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/AasmCodeGenerator.java index 7a9b177..84990a5 100644 --- a/src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/CodeGenerator.java +++ b/src/main/java/edu/kit/kastel/vads/compiler/backend/aasm/AasmCodeGenerator.java @@ -1,5 +1,6 @@ package edu.kit.kastel.vads.compiler.backend.aasm; +import edu.kit.kastel.vads.compiler.backend.CodeGenerator; import edu.kit.kastel.vads.compiler.backend.regalloc.Register; import edu.kit.kastel.vads.compiler.ir.IrGraph; import edu.kit.kastel.vads.compiler.ir.node.AddNode; @@ -23,7 +24,7 @@ import java.util.Set; import static edu.kit.kastel.vads.compiler.ir.util.NodeSupport.predecessorSkipProj; -public class CodeGenerator { +public class AasmCodeGenerator implements CodeGenerator { public String generateCode(List program) { StringBuilder builder = new StringBuilder();