From b83187f66175d93a0dba45f6d110ed94badac7c5 Mon Sep 17 00:00:00 2001 From: Mistivia Date: Sun, 16 Mar 2025 20:01:42 +0800 Subject: refactor using allocator pattern --- src/as_main.c | 7 ++-- src/as_op.c | 7 ++-- src/as_op.h | 3 +- src/as_parser.c | 103 +++++++++++++++++++++++++++++------------------------ src/as_parser.h | 39 ++++++++++---------- src/as_tokenizer.c | 49 +++++++++++++------------ src/as_tokenizer.h | 39 +++++++++++--------- src/utils.c | 37 +++++++++++++++++++ src/utils.h | 14 ++++++++ 9 files changed, 185 insertions(+), 113 deletions(-) create mode 100644 src/utils.c create mode 100644 src/utils.h diff --git a/src/as_main.c b/src/as_main.c index eb5de20..2809c59 100644 --- a/src/as_main.c +++ b/src/as_main.c @@ -1,15 +1,18 @@ #include #include "as_tokenizer.h" +#include "utils.h" int main(int argc, char** argv) { if (argc != 2) { fprintf(stderr, "Usage: fvm-as \n"); return 1; } - + Allocator alct = newAllocator(); FILE *fp = fopen(argv[1], "r"); - TokenStream* ts = makeTokenStream(fp); + TokenStream ts = makeTokenStream(alct, fp); + + deleteAllocator(alct); return 0; } diff --git a/src/as_op.c b/src/as_op.c index 847214d..88884b8 100644 --- a/src/as_op.c +++ b/src/as_op.c @@ -3,12 +3,11 @@ #include struct opTableEntry{ - Op op; + enum op op; const char* name; }; -typedef struct opTableEntry OpTableEntry; -OpTableEntry opTable[] = { +struct opTableEntry opTable[] = { {ADD, "add"}, {SUB, "sub"}, {MUL, "mul"}, @@ -18,7 +17,7 @@ OpTableEntry opTable[] = { {OPEND, NULL} }; -Op str2op(const char* str) { +enum op str2op(const char* str) { for (int i = 0; opTable[i].name != NULL; i++) { if (strcmp(opTable[i].name, str) == 0) { return opTable[i].op; diff --git a/src/as_op.h b/src/as_op.h index ec88670..dcd77e0 100644 --- a/src/as_op.h +++ b/src/as_op.h @@ -6,9 +6,8 @@ enum op { // place holder for the end of the table OPEND }; -typedef enum op Op; -Op str2op(const char *str); +enum op str2op(const char *str); #endif diff --git a/src/as_parser.c b/src/as_parser.c index b419be5..f848730 100644 --- a/src/as_parser.c +++ b/src/as_parser.c @@ -1,36 +1,46 @@ #include "as_parser.h" +#include "as_tokenizer.h" +#include "utils.h" +#include #include // BNF // === // // ::= -// ::= | +// ::= newline | newline // ::=