diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-01-18 20:42:54 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-01-18 20:49:30 +0330 |
commit | 43392fc66ab207e53a6924a2edbcd7ca0acecea8 (patch) | |
tree | 5a064c4e144035d1a07f31f767417b9e44b2ebbf /src/compiler/code-generator.h |
initial commit
Diffstat (limited to 'src/compiler/code-generator.h')
-rw-r--r-- | src/compiler/code-generator.h | 37 |
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); |