From d933ce70bd2c497e4af26483abafebfce436986e Mon Sep 17 00:00:00 2001 From: thing1 Date: Mon, 1 Jul 2024 11:36:45 +0100 Subject: updated work --- comp/lucas-standen-NEA/code/execution/Makefile | 6 ++++ comp/lucas-standen-NEA/code/execution/builtin.c | 45 ++++++++++++++++++++++++ comp/lucas-standen-NEA/code/execution/builtin.h | 7 ++++ comp/lucas-standen-NEA/code/execution/exec | Bin 0 -> 30040 bytes comp/lucas-standen-NEA/code/execution/exec.c | 24 +++++++++++++ comp/lucas-standen-NEA/code/execution/types.c | 0 comp/lucas-standen-NEA/code/execution/types.h | 0 7 files changed, 82 insertions(+) create mode 100644 comp/lucas-standen-NEA/code/execution/builtin.c create mode 100644 comp/lucas-standen-NEA/code/execution/builtin.h create mode 100755 comp/lucas-standen-NEA/code/execution/exec delete mode 100644 comp/lucas-standen-NEA/code/execution/types.c delete mode 100644 comp/lucas-standen-NEA/code/execution/types.h (limited to 'comp/lucas-standen-NEA/code/execution') diff --git a/comp/lucas-standen-NEA/code/execution/Makefile b/comp/lucas-standen-NEA/code/execution/Makefile index e69de29..405f9de 100644 --- a/comp/lucas-standen-NEA/code/execution/Makefile +++ b/comp/lucas-standen-NEA/code/execution/Makefile @@ -0,0 +1,6 @@ +all: exec builtin + $(info done execution!) +exec: exec.c builtin + cc exec.c builtin.o ../tokenizer/tokenizer.o ../global/util.o -o exec -ggdb +builtin: builtin.c + cc builtin.c -c -o builtin.o -ggdb diff --git a/comp/lucas-standen-NEA/code/execution/builtin.c b/comp/lucas-standen-NEA/code/execution/builtin.c new file mode 100644 index 0000000..df3ca03 --- /dev/null +++ b/comp/lucas-standen-NEA/code/execution/builtin.c @@ -0,0 +1,45 @@ +#include +#include +#include "../global/types.h" +#include "../global/util.h" + +#define MAXARGS 8 + +void *doCall(ast_node *node){ + builtInFuncs id = node->func->builtInFunc; + for (int i = 0; i < MAXARGS; i++){ + if (node->args[i] != NULL){ + node->literalArgs[i] = doCall(node->args[i]); + } + } + + char *str = CheckedMalloc(20); + switch (id){ + case ADD: + snprintf(str, 20, "%d", atoi(node->literalArgs[0]) + atoi(node->literalArgs[1])); + return str; + break; + case SUB: + snprintf(str, 20, "%d", atoi(node->literalArgs[0]) - atoi(node->literalArgs[1])); + return str; + break; + case DIV: + snprintf(str, 20, "%d", atoi(node->literalArgs[0]) / atoi(node->literalArgs[1])); + return str; + break; + case MUL: + snprintf(str, 20, "%d", atoi(node->literalArgs[0]) * atoi(node->literalArgs[1])); + return str; + break; + + case WRITE: + fputs(node->literalArgs[0], stdout); + break; + + case EXIT: + int returnValue = atoi(node->literalArgs[0]); + CheckedFreeALL(); + exit(returnValue); + break; + } +} diff --git a/comp/lucas-standen-NEA/code/execution/builtin.h b/comp/lucas-standen-NEA/code/execution/builtin.h new file mode 100644 index 0000000..46ffde5 --- /dev/null +++ b/comp/lucas-standen-NEA/code/execution/builtin.h @@ -0,0 +1,7 @@ +#include +#include "../global/types.h" +#include "../global/util.h" + +#define MAXARGS 8 + +void *doCall(ast_node *node); diff --git a/comp/lucas-standen-NEA/code/execution/exec b/comp/lucas-standen-NEA/code/execution/exec new file mode 100755 index 0000000..ca6eb33 Binary files /dev/null and b/comp/lucas-standen-NEA/code/execution/exec differ diff --git a/comp/lucas-standen-NEA/code/execution/exec.c b/comp/lucas-standen-NEA/code/execution/exec.c index e69de29..fb85d3f 100644 --- a/comp/lucas-standen-NEA/code/execution/exec.c +++ b/comp/lucas-standen-NEA/code/execution/exec.c @@ -0,0 +1,24 @@ +#include +#include + +#include "./builtin.h" + +#include "../global/util.h" + +#include "../tokenizer/tokenizer.h" + +int main(){ + char *sample = "(write (* 2 5))"; + ast_node *root = tokenize(sample); + doCall(root); + sample = "(write \n)"; + root = tokenize(sample); + doCall(root); + sample = "(exit 0)"; + root = tokenize(sample); + doCall(root); + + CheckedFreeALL(); + + return 0; +} diff --git a/comp/lucas-standen-NEA/code/execution/types.c b/comp/lucas-standen-NEA/code/execution/types.c deleted file mode 100644 index e69de29..0000000 diff --git a/comp/lucas-standen-NEA/code/execution/types.h b/comp/lucas-standen-NEA/code/execution/types.h deleted file mode 100644 index e69de29..0000000 -- cgit v1.2.3