summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-20 23:02:49 +0200
committerElias Haugsbakk <[email protected]>2026-09-20 23:02:49 +0200
commitc84b76d3848b089cbdd5650b894067fbf6060161 (patch)
tree6f3911f2416725b1e5f6dbb393f542dd8afb5526 /src/main/java/no/eliashaugsbakk/kompilator/IRGeneration
parent79fc3dd706b968a9249dfd2db6b5175e4e4a85d4 (diff)
Implement the record interpretation in asm construction and implement variables
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/IRGeneration')
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java9
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instr.java33
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java12
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java11
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Call.java8
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Instruction.java9
6 files changed, 47 insertions, 35 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java
index 1c42673..cf50a74 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java
@@ -2,6 +2,10 @@ package no.eliashaugsbakk.kompilator.IRGeneration;
import java.util.ArrayList;
import java.util.List;
+import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Alloc;
+import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Assign;
+import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Call;
+import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Instruction;
import no.eliashaugsbakk.kompilator.parsing.AST;
import no.eliashaugsbakk.kompilator.parsing.node.Program;
import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression;
@@ -15,7 +19,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.statement.Statement;
public class IRGenerator {
private final AST ast;
- private final List<Instr> ir = new ArrayList<>();
+ private final List<Instruction> ir = new ArrayList<>();
private int tempCounter = 0;
@@ -23,12 +27,13 @@ public class IRGenerator {
this.ast = ast;
}
- public List<Instr> generate() {
+ public List<Instruction> generate() {
Program program = (Program) ast.getRoot();
for (Statement stmt : program.statements) {
generateStatement(stmt);
}
+ ir.forEach(IO::println);
return ir;
}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instr.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instr.java
deleted file mode 100644
index 09ed4f6..0000000
--- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instr.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package no.eliashaugsbakk.kompilator.IRGeneration;
-
-import java.util.List;
-
-public sealed interface Instr permits Alloc, Assign, Call {
-}
-
-
-// allocate a new variable: set x: string = "Hello"; mut y: string?;
-//
-// Alloc("x", "string", false, "Hello") // Alloc("y", "string", true, "null")
-record Alloc(String name, String type, boolean mutable, String initializer) implements Instr {
- @Override
- public String toString() {
- return "Alloc[name=" + name + ", type=" + type + ", mutable=" + mutable + ", initializer=\"" + initializer + "\"]";
- }
-}
-
-
-// assign a value to a variable: x = "Hello";
-// Assign("x", "Hello")
-record Assign(String name, String value) implements Instr {
- @Override
- public String toString() {
- return "Assign[name=" + name + ", value=\"" + value + "\"]";
- }
-}
-
-
-// call a function: skriv("hello");
-// Call("skriv", ["t1"])
-record Call(String fn, List<String> args) implements Instr {
-}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java
new file mode 100644
index 0000000..cda3a56
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Alloc.java
@@ -0,0 +1,12 @@
+package no.eliashaugsbakk.kompilator.IRGeneration.Instructions;
+
+// 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
+ 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
new file mode 100644
index 0000000..80a6d9e
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Assign.java
@@ -0,0 +1,11 @@
+package no.eliashaugsbakk.kompilator.IRGeneration.Instructions;
+
+// assign a value to a variable: x = "Hello";
+// Assign("x", "Hello")
+public record Assign(String name, String value) implements Instruction {
+ @Override
+ public String toString() {
+ return "Assign[name=" + name + ", value=\"" + value + "\"]";
+ }
+}
+
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Call.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Call.java
new file mode 100644
index 0000000..98f816c
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Call.java
@@ -0,0 +1,8 @@
+package no.eliashaugsbakk.kompilator.IRGeneration.Instructions;
+
+import java.util.List;
+
+// call a function: skriv("hello");
+// Call("skriv", ["t1"])
+public record Call(String fn, List<String> args) implements Instruction {
+}
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Instruction.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Instruction.java
new file mode 100644
index 0000000..09796d6
--- /dev/null
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/Instructions/Instruction.java
@@ -0,0 +1,9 @@
+package no.eliashaugsbakk.kompilator.IRGeneration.Instructions;
+
+public sealed interface Instruction permits Alloc, Assign, Call {
+}
+
+
+
+
+