From f83be7809a5c9b4dcedcc184da59872552c97bb4 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Sat, 19 Sep 2026 01:16:24 +0200 Subject: Implement IR generator --- .../kompilator/IRGeneration/IRGeneration.java | 4 -- .../kompilator/IRGeneration/IRGenerator.java | 54 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) delete mode 100644 src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneration.java create mode 100644 src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java (limited to 'src/main/java/no/eliashaugsbakk/kompilator/IRGeneration') diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneration.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneration.java deleted file mode 100644 index f37db3d..0000000 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneration.java +++ /dev/null @@ -1,4 +0,0 @@ -package no.eliashaugsbakk.kompilator.IRGeneration; - -public class IRGeneration { -} diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java new file mode 100644 index 0000000..55b349e --- /dev/null +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java @@ -0,0 +1,54 @@ +package no.eliashaugsbakk.kompilator.IRGeneration; + +import java.util.ArrayList; +import java.util.List; +import no.eliashaugsbakk.kompilator.parsing.AST; +import no.eliashaugsbakk.kompilator.parsing.node.Program; +import no.eliashaugsbakk.kompilator.parsing.node.expression.Expression; +import no.eliashaugsbakk.kompilator.parsing.node.expression.FunctionCall; +import no.eliashaugsbakk.kompilator.parsing.node.expression.StringLiteral; +import no.eliashaugsbakk.kompilator.parsing.node.statement.ExpressionStatement; +import no.eliashaugsbakk.kompilator.parsing.node.statement.Statement; + +public class IRGenerator { + private final AST ast; + private final List ir = new ArrayList<>(); + private int tempVarCounter = 0; + + + public IRGenerator(AST ast) { + this.ast = ast; + } + + public List generate() { + Program program = (Program) ast.getRoot(); + + for (Statement stmt : program.statements) { + generateStatement(stmt); + } + + return ir; + } + + private void generateStatement(Statement stmt) { + if (stmt instanceof ExpressionStatement exprStmt) { + generateExpression(exprStmt.expression); + } + } + + private void generateExpression(Expression expr) { + if (expr instanceof FunctionCall call) { + generateFunctionCall(call); + } + } + + private void generateFunctionCall(FunctionCall call) { + for (Expression arg : call.arguments) { + if (arg instanceof StringLiteral stringLit) { + String tempVar = "t" + (tempVarCounter++); + ir.add(tempVar + ": string = \"" + stringLit.value + "\""); + ir.add(String.format("print(%s)", tempVar)); + } + } + } +} -- cgit v1.2.3