diff options
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution')
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/Makefile | 6 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/builtin.c | 45 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/builtin.h | 7 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/execution/exec | bin | 0 -> 30040 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/exec.c | 24 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/types.c | 0 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/types.h | 0 |
7 files changed, 82 insertions, 0 deletions
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 <stdlib.h> +#include <stdio.h> +#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 <stdlib.h> +#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 Binary files differnew file mode 100755 index 0000000..ca6eb33 --- /dev/null +++ b/comp/lucas-standen-NEA/code/execution/exec 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 <stdio.h> +#include <stdlib.h> + +#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 --- a/comp/lucas-standen-NEA/code/execution/types.c +++ /dev/null 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 --- a/comp/lucas-standen-NEA/code/execution/types.h +++ /dev/null |