diff options
| author | Elias Haugsbakk <[email protected]> | 2026-09-18 19:10:54 +0200 |
|---|---|---|
| committer | Elias Haugsbakk <[email protected]> | 2026-09-19 01:59:23 +0200 |
| commit | 6dd4036bd828dac87b9f63d0a58693b30c46faed (patch) | |
| tree | c194ad43c1d9b1a332e28659863b88f463a07a9c /src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java | |
| parent | 24f5104f56cfc67cf1e89da3e5913b2954acc36d (diff) | |
split into separate packages/classes
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java')
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java b/src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java deleted file mode 100644 index 082f21d..0000000 --- a/src/main/java/no/eliashaugsbakk/kompilator/AssemblyBuilder.java +++ /dev/null @@ -1,86 +0,0 @@ -package no.eliashaugsbakk.kompilator; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class AssemblyBuilder { - Map<String, String> stringVariables = new HashMap<>(); - - StringBuilder finalAssembly; - StringBuilder text; - StringBuilder rodata; - StringBuilder data; - - private final static String exit = """ - mov rax, 60 - xor rdi, rdi - syscall - """; - - public AssemblyBuilder() { - this.finalAssembly = new StringBuilder(".intel_syntax noprefix\n.global _start\n"); - // CPU instructions - this.text = new StringBuilder(".text\n_start:\n\n"); - // Read only data - this.rodata = new StringBuilder("\n.section .rodata\n"); - // Global initialized variables, Read - Write - this.data = new StringBuilder("\n.data\n"); - } - - String createAssembly(List<String> IR) { - for (String line : IR) { - line = line.trim(); - - if (line.startsWith("print")) { - handlePrint(line); - } else if (line.contains("=")) { - handleAssignment(line); - } - } - this.text.append(exit); - this.finalAssembly.append(text); - this.finalAssembly.append(rodata); - this.finalAssembly.append(data); - return this.finalAssembly.toString(); - } - - private void handleAssignment(String line) { - /* Example IR: - variable_name: type = data - str1: string = "Hello world" - */ - String name = line.substring(0, line.indexOf(":")); - - String dataType = line.substring(line.indexOf(":") + 2, line.indexOf("=") - 1); - - String value = line.substring(line.indexOf("=") + 2); - - if (dataType.contains("string")) { - assignString(name, value); - } else { - IO.println("err: Unknown data type: " + dataType); - } - } - - private void assignString(String name, String value) { - value = value.substring(1, value.length() - 1); - this.rodata.append(String.format(""" - %s: .ascii "%s" - """, name, value)); - this.stringVariables.put(name, value); - } - - void handlePrint(String line) { - String variableName = line.substring(line.indexOf("(") + 1, line.lastIndexOf(")")); - - this.text.append(String.format(""" - mov rax, 1 - mov rdi, 1 - lea rsi, [%s] - lea rdx, [%d] - syscall - - """, variableName, this.stringVariables.get(variableName).length())); - } -} |
