summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code/execution
diff options
context:
space:
mode:
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution')
-rw-r--r--comp/lucas-standen-NEA/code/execution/Makefile6
-rw-r--r--comp/lucas-standen-NEA/code/execution/builtin.c45
-rw-r--r--comp/lucas-standen-NEA/code/execution/builtin.h7
-rwxr-xr-xcomp/lucas-standen-NEA/code/execution/execbin0 -> 30040 bytes
-rw-r--r--comp/lucas-standen-NEA/code/execution/exec.c24
-rw-r--r--comp/lucas-standen-NEA/code/execution/types.c0
-rw-r--r--comp/lucas-standen-NEA/code/execution/types.h0
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
new file mode 100755
index 0000000..ca6eb33
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/execution/exec
Binary files 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 <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