diff options
author | thing1 <thing1@seacrossedlovers.xyz> | 2024-07-11 13:33:42 +0100 |
---|---|---|
committer | thing1 <thing1@seacrossedlovers.xyz> | 2024-07-11 13:33:42 +0100 |
commit | fec2f4d9d1989feb0290dfcff416385ec4b97586 (patch) | |
tree | 6098d2f8c80cabe776ca0a8c6f24233906573844 /comp/lucas-standen-NEA/code | |
parent | 3d0db47fa403229bced868f0b59e024b95cd19b6 (diff) |
finished vars, started work on the final zpy executable, still need to fix the parser though
Diffstat (limited to 'comp/lucas-standen-NEA/code')
-rw-r--r-- | comp/lucas-standen-NEA/code/Makefile | 4 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/TODO | 2 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/execution/exec | bin | 42080 -> 42120 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/exec.c | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/vars.h | 1 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/global/util.c | 4 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/global/util.h | 8 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/proto/parser/test | bin | 29232 -> 29656 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/parser.c | 27 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/parser.h | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/tokenizer.c | 1 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/zpy/Makefile | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/zpy/sample.zpy | 3 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/zpy/zpy | bin | 0 -> 30248 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/zpy/zpy.c | 14 |
15 files changed, 52 insertions, 18 deletions
diff --git a/comp/lucas-standen-NEA/code/Makefile b/comp/lucas-standen-NEA/code/Makefile index d8330a0..c88c835 100644 --- a/comp/lucas-standen-NEA/code/Makefile +++ b/comp/lucas-standen-NEA/code/Makefile @@ -1,8 +1,8 @@ all: export FLAGS="-ggdb" cd global; make - cd execution; make cd tokenizer; make + cd execution; make + cd zpy; make cd ads; make cd proto; make - $(info done!) diff --git a/comp/lucas-standen-NEA/code/TODO b/comp/lucas-standen-NEA/code/TODO index e68835e..83fd5b6 100644 --- a/comp/lucas-standen-NEA/code/TODO +++ b/comp/lucas-standen-NEA/code/TODO @@ -1 +1 @@ -fix the variable definiton->id in the function newVar +FIX THE parser to make it work properly. diff --git a/comp/lucas-standen-NEA/code/execution/exec b/comp/lucas-standen-NEA/code/execution/exec Binary files differindex f30273e..de1cd68 100755 --- a/comp/lucas-standen-NEA/code/execution/exec +++ 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 73961ac..2b6b202 100644 --- a/comp/lucas-standen-NEA/code/execution/exec.c +++ b/comp/lucas-standen-NEA/code/execution/exec.c @@ -2,6 +2,7 @@ #include <stdlib.h> #include "./builtin.h" + #include "../global/util.h" #include "../tokenizer/tokenizer.h" @@ -10,6 +11,7 @@ int main(){ ast_node *root = tokenize(sample); doCall(root); + free(root); return 0; diff --git a/comp/lucas-standen-NEA/code/execution/vars.h b/comp/lucas-standen-NEA/code/execution/vars.h index 2e8ef99..7e5c7aa 100644 --- a/comp/lucas-standen-NEA/code/execution/vars.h +++ b/comp/lucas-standen-NEA/code/execution/vars.h @@ -1,4 +1,3 @@ #include "../global/types.h" - void newVar(Vdef *definiton, literal *value); literal *getVarCalled(char *name); diff --git a/comp/lucas-standen-NEA/code/global/util.c b/comp/lucas-standen-NEA/code/global/util.c index 5f41dbc..dff05da 100644 --- a/comp/lucas-standen-NEA/code/global/util.c +++ b/comp/lucas-standen-NEA/code/global/util.c @@ -104,7 +104,9 @@ Vdef *isVdef(char *str){ Vdef *out = CheckedMalloc(sizeof(Vdef)); char *type; - out->id = strtok(str, ":"); + char *tmp = strtok(str, ":"); + out->id = CheckedMalloc(strlen(tmp)+1); + memcpy(out->id, tmp, strlen(tmp)+1); type = strtok(NULL, ":"); if (strcmp(type, "i64") == 0) out->type = TI64; diff --git a/comp/lucas-standen-NEA/code/global/util.h b/comp/lucas-standen-NEA/code/global/util.h index dc59460..130f823 100644 --- a/comp/lucas-standen-NEA/code/global/util.h +++ b/comp/lucas-standen-NEA/code/global/util.h @@ -1,11 +1,3 @@ -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdbool.h> -#include <errno.h> -#include <error.h> -#include <ctype.h> - // functions for user void Die(); // brings down the program diff --git a/comp/lucas-standen-NEA/code/proto/parser/test b/comp/lucas-standen-NEA/code/proto/parser/test Binary files differindex 62ad779..260bab6 100755 --- a/comp/lucas-standen-NEA/code/proto/parser/test +++ b/comp/lucas-standen-NEA/code/proto/parser/test diff --git a/comp/lucas-standen-NEA/code/tokenizer/parser.c b/comp/lucas-standen-NEA/code/tokenizer/parser.c index 7d827f9..d4fec18 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/parser.c +++ b/comp/lucas-standen-NEA/code/tokenizer/parser.c @@ -1,12 +1,10 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "../global/types.h" #include "../global/util.h" -char *readFile(char *fileName); // reads the file into a single var -char *parser(char *fileName); // general parser function - char *readFile(char *filename){ FILE *f = fopen(filename, "r"); if (f == NULL) @@ -58,6 +56,28 @@ FILE *preProcess(char *contents){ return tmp; } +char **getExpressions(char *file){ + int depth = 0; + char *str = CheckedMalloc(strlen(file)+1); + int pos = 0; + for (int i = 0; i < strlen(file); i++){ + str[pos] = str[i]; + pos++; + if (file[i] == '(') + depth++; + if (file[i] == ')') + depth--; + + if (depth == 0) { + str[pos] = '\0'; + printf("%s\n", str); + pos = 0; + } + } + + return NULL; +} + char *parser(char *fileName){ FILE *tmp = preProcess(readFile(fileName)); fseek(tmp, 0, SEEK_END); @@ -66,5 +86,6 @@ char *parser(char *fileName){ char *buf = CheckedMalloc(len); fgets(buf, len, tmp); fclose(tmp); + getExpressions(buf); return buf; } diff --git a/comp/lucas-standen-NEA/code/tokenizer/parser.h b/comp/lucas-standen-NEA/code/tokenizer/parser.h index 993d257..496bdbc 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/parser.h +++ b/comp/lucas-standen-NEA/code/tokenizer/parser.h @@ -1,3 +1 @@ char *parser(char *fileName); // general parser function -char *readFile(char *fileName); // reads the file into a single var -FILE *preProcess(char *contents); diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c index afd68fe..8e45531 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c +++ b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c @@ -1,4 +1,5 @@ #include <stdio.h> +#include <stdlib.h> #include <string.h> #include "../global/types.h" diff --git a/comp/lucas-standen-NEA/code/zpy/Makefile b/comp/lucas-standen-NEA/code/zpy/Makefile index e69de29..3bd6ea1 100644 --- a/comp/lucas-standen-NEA/code/zpy/Makefile +++ b/comp/lucas-standen-NEA/code/zpy/Makefile @@ -0,0 +1,2 @@ +zpy: + cc zpy.c ../global/util.o ../tokenizer/parser.o -o zpy -ggdb diff --git a/comp/lucas-standen-NEA/code/zpy/sample.zpy b/comp/lucas-standen-NEA/code/zpy/sample.zpy new file mode 100644 index 0000000..39dacc0 --- /dev/null +++ b/comp/lucas-standen-NEA/code/zpy/sample.zpy @@ -0,0 +1,3 @@ +(let a:i64 4) +(let b:i64 2) +(+ a b) diff --git a/comp/lucas-standen-NEA/code/zpy/zpy b/comp/lucas-standen-NEA/code/zpy/zpy Binary files differnew file mode 100755 index 0000000..b7479f6 --- /dev/null +++ b/comp/lucas-standen-NEA/code/zpy/zpy diff --git a/comp/lucas-standen-NEA/code/zpy/zpy.c b/comp/lucas-standen-NEA/code/zpy/zpy.c index e69de29..70d2757 100644 --- a/comp/lucas-standen-NEA/code/zpy/zpy.c +++ b/comp/lucas-standen-NEA/code/zpy/zpy.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +#include "../tokenizer/parser.h" +#include "../global/types.h" +#include "../global/util.h" + +int main(int argc, char **argv){ + if (argc < 2) { + printf("repl not yet implemented\n"); + Die(); + } + parser(argv[1]); + return 0; +} |