summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2024-07-11 13:33:42 +0100
committerthing1 <thing1@seacrossedlovers.xyz>2024-07-11 13:33:42 +0100
commitfec2f4d9d1989feb0290dfcff416385ec4b97586 (patch)
tree6098d2f8c80cabe776ca0a8c6f24233906573844 /comp/lucas-standen-NEA/code
parent3d0db47fa403229bced868f0b59e024b95cd19b6 (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/Makefile4
-rw-r--r--comp/lucas-standen-NEA/code/TODO2
-rwxr-xr-xcomp/lucas-standen-NEA/code/execution/execbin42080 -> 42120 bytes
-rw-r--r--comp/lucas-standen-NEA/code/execution/exec.c2
-rw-r--r--comp/lucas-standen-NEA/code/execution/vars.h1
-rw-r--r--comp/lucas-standen-NEA/code/global/util.c4
-rw-r--r--comp/lucas-standen-NEA/code/global/util.h8
-rwxr-xr-xcomp/lucas-standen-NEA/code/proto/parser/testbin29232 -> 29656 bytes
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/parser.c27
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/parser.h2
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/tokenizer.c1
-rw-r--r--comp/lucas-standen-NEA/code/zpy/Makefile2
-rw-r--r--comp/lucas-standen-NEA/code/zpy/sample.zpy3
-rwxr-xr-xcomp/lucas-standen-NEA/code/zpy/zpybin0 -> 30248 bytes
-rw-r--r--comp/lucas-standen-NEA/code/zpy/zpy.c14
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
index f30273e..de1cd68 100755
--- a/comp/lucas-standen-NEA/code/execution/exec
+++ 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 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
index 62ad779..260bab6 100755
--- a/comp/lucas-standen-NEA/code/proto/parser/test
+++ b/comp/lucas-standen-NEA/code/proto/parser/test
Binary files differ
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
new file mode 100755
index 0000000..b7479f6
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/zpy/zpy
Binary files differ
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;
+}