summaryrefslogtreecommitdiff
path: root/src/compiler/code-generator.h
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-01-18 20:42:54 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-01-18 20:49:30 +0330
commit43392fc66ab207e53a6924a2edbcd7ca0acecea8 (patch)
tree5a064c4e144035d1a07f31f767417b9e44b2ebbf /src/compiler/code-generator.h
initial commit
Diffstat (limited to 'src/compiler/code-generator.h')
-rw-r--r--src/compiler/code-generator.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/compiler/code-generator.h b/src/compiler/code-generator.h
new file mode 100644
index 0000000..3232fb3
--- /dev/null
+++ b/src/compiler/code-generator.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "compiler/ast-tree.h"
+#include <stddef.h>
+#include <stdint.h>
+
+typedef enum CodeGeneratorInstruction : uint8_t {
+ CODE_GENERATOR_INSTRUCTION_PRINT,
+ CODE_GENERATOR_INSTRUCTION_RET,
+} CodeGeneratorInstruction;
+
+typedef struct CodeGeneratorCode {
+ char *label_begin;
+ char *label_end;
+ CodeGeneratorInstruction instruction;
+} CodeGeneratorCode;
+
+typedef struct CodeGeneratorCodes {
+ CodeGeneratorCode *codes;
+ size_t codes_size;
+} CodeGeneratorCodes;
+
+CodeGeneratorCode createGenerateCode(char *label_begin, char *label_end,
+ CodeGeneratorInstruction instruction);
+
+CodeGeneratorCode *newGenerateCode(char *label_begin, char *label_end,
+ CodeGeneratorInstruction instruction);
+
+void generateCodePushCode(CodeGeneratorCodes *codes, CodeGeneratorCode code);
+
+CodeGeneratorCodes *codeGenerator(AstTreeRoot *astTreeRoot);
+
+bool codeGeneratorAstTreeFunction(char *label_begin,char *label_end,AstTree astTree, CodeGeneratorCodes *codes);
+
+char *codeGeneratorToFlatASM(const CodeGeneratorCodes *codes);
+
+bool codeGeneratorFlatASMExec(const char *filePath,const char *fasm);