summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code2
diff options
context:
space:
mode:
authorThing1 <thing1@seacrossedlovers.xyz>2024-09-10 16:36:22 +0100
committerThing1 <thing1@seacrossedlovers.xyz>2024-09-10 16:36:22 +0100
commitfe89cc56e2aa7fa119e2251d104acde37d632cd9 (patch)
treebc3f21ac2e998b292dd836c745c308dbe63e1221 /comp/lucas-standen-NEA/code2
parent9b83439d9d0204a5092772ae46ef43cea42dbc7c (diff)
started to fix the issue of not outputing to a var
Diffstat (limited to 'comp/lucas-standen-NEA/code2')
-rw-r--r--comp/lucas-standen-NEA/code2/Makefile2
-rw-r--r--comp/lucas-standen-NEA/code2/comp.c90
-rw-r--r--comp/lucas-standen-NEA/code2/comp.h5
-rw-r--r--comp/lucas-standen-NEA/code2/gdb.corebin10729440 -> 0 bytes
-rw-r--r--comp/lucas-standen-NEA/code2/parser.c3
-rwxr-xr-xcomp/lucas-standen-NEA/code2/samplebin6432 -> 15496 bytes
-rw-r--r--comp/lucas-standen-NEA/code2/sample.zpy5
-rwxr-xr-xcomp/lucas-standen-NEA/code2/zpybin24216 -> 31600 bytes
-rw-r--r--comp/lucas-standen-NEA/code2/zpy.c5
-rw-r--r--comp/lucas-standen-NEA/code2/zpy.corebin299160 -> 0 bytes
-rwxr-xr-xcomp/lucas-standen-NEA/code2/zpy.sh3
11 files changed, 60 insertions, 53 deletions
diff --git a/comp/lucas-standen-NEA/code2/Makefile b/comp/lucas-standen-NEA/code2/Makefile
index 0ebc2c5..bfd23e9 100644
--- a/comp/lucas-standen-NEA/code2/Makefile
+++ b/comp/lucas-standen-NEA/code2/Makefile
@@ -19,4 +19,4 @@ _debug:
${CC} debug.c -c -o debug.o ${CFLAGS}
clean:
- rm -rf zpy *.o
+ rm -rf zpy *.o *.core
diff --git a/comp/lucas-standen-NEA/code2/comp.c b/comp/lucas-standen-NEA/code2/comp.c
index 4bc67e9..3c47cbb 100644
--- a/comp/lucas-standen-NEA/code2/comp.c
+++ b/comp/lucas-standen-NEA/code2/comp.c
@@ -4,6 +4,8 @@
#include "tokenizer.h"
+#define MAXOUTLEN 512
+
char *names[] = {
"defun", // takes a func name, func return type, and args // 0
"endfun", // takes no args // 1
@@ -33,7 +35,7 @@ char *names[] = {
"return",
};
-void vartypeToC(char *str, FILE *f){
+void vartypeToC(char *str, char *out){
char *name = malloc(strlen(str));
char *type = malloc(strlen(str));
@@ -57,12 +59,12 @@ void vartypeToC(char *str, FILE *f){
}
type[j] = '\0';
- fprintf(f, "%s %s", type, name);
+ snprintf(out, MAXOUTLEN, "%s%s %s", out, type, name);
free(type);
free(name);
}
-char *getVarName(char *exp, FILE *f){
+char *getVarName(char *exp){
char *out = malloc(strlen(exp));
memcpy(out, exp, strlen(exp));
char *pos = strchr(out, ':');
@@ -70,90 +72,90 @@ char *getVarName(char *exp, FILE *f){
return out;
}
-void reversepolishToC(astNode *exp, FILE *f){
- fprintf(f, "%s ", exp->args[0]);
- if (exp->func[0] == '=') fprintf(f, "==");
- else fprintf(f, "%s", exp->func);
- fprintf(f, " %s", exp->args[1]);
+void reversepolishToC(astNode *exp, char *out){
+ snprintf(out, MAXOUTLEN, "%s ", exp->args[0]);
+ if (exp->func[0] == '=') snprintf(out, MAXOUTLEN, "==");
+ else snprintf(out, MAXOUTLEN, "%s", exp->func);
+ snprintf(out, MAXOUTLEN, " %s", exp->args[1]);
}
-void compile(astNode *node, FILE *f){
+void compile(astNode *node, char *out){
if (strcmp(names[0], node->func) == 0){
- fprintf(f, "%s %s(", node->args[1], node->args[0]);
+ snprintf(out, MAXOUTLEN, "%s %s(", node->args[1], node->args[0]);
int i = 2;
while (node->args[i] != NULL){
- vartypeToC(node->args[i], f);
+ vartypeToC(node->args[i], out);
i++;
}
- fprintf(f, "){\n");
+ snprintf(out, MAXOUTLEN, "%s){\n", out);
}
else if (strcmp(names[1], node->func) == 0){
- fprintf(f, "\n}\n");
+ snprintf(out, MAXOUTLEN, "}\n");
}
else if (strcmp(names[2], node->func) == 0){
- fprintf(f, "const ");
- vartypeToC(node->args[0], f);
- fprintf(f, " = %s;\n", node->args[1]);
+ snprintf(out, MAXOUTLEN, "const ");
+ vartypeToC(node->args[0], out);
+ snprintf(out, MAXOUTLEN, " = %s;\n", node->args[1]);
}
else if (strcmp(names[3], node->func) == 0){
- vartypeToC(node->args[0], f);
- fprintf(f, " = %s;\n", node->args[1]);
+ vartypeToC(node->args[0], out);
+ snprintf(out, MAXOUTLEN, " = %s;\n", node->args[1]);
}
else if (strcmp(names[4], node->func) == 0){
- fprintf(f, "if (");
- reversepolishToC(node->children[0], f);
- fprintf(f, "){\n");
+ snprintf(out, MAXOUTLEN, "if (");
+ reversepolishToC(node->children[0], out);
+ snprintf(out, MAXOUTLEN, "){\n");
}
else if (strcmp(names[5], node->func) == 0){
- fprintf(f, "\n}\n");
+ snprintf(out, MAXOUTLEN, "}\n");
}
else if (strcmp(names[6], node->func) == 0){
- fprintf(f, "\n}\n");
- fprintf(f, "else if (");
- reversepolishToC(node->children[0], f);
- fprintf(f, "){\n");
+ snprintf(out, MAXOUTLEN, "}\n");
+ snprintf(out, MAXOUTLEN, "else if (");
+ reversepolishToC(node->children[0], out);
+ snprintf(out, MAXOUTLEN, "){\n");
}
else if (strcmp(names[7], node->func) == 0){
- fprintf(f, "\n}\n");
- fprintf(f, "else{");
+ snprintf(out, MAXOUTLEN, "}\n");
+ snprintf(out, MAXOUTLEN, "else{");
}
else if (strcmp(names[8], node->func) == 0){
- fprintf(f, "for (");
- vartypeToC(node->args[0], f);
- fprintf(f, " = 0;");
- reversepolishToC(node->children[1], f);
- fprintf(f, "; %s+=%s){", getVarName(node->args[0], f), node->args[2]);
+ snprintf(out, MAXOUTLEN, "for (");
+ vartypeToC(node->args[0], out);
+ snprintf(out, MAXOUTLEN, " = 0;");
+ reversepolishToC(node->children[1], out);
+ snprintf(out, MAXOUTLEN, "; %s+=%s){", getVarName(node->args[0]), node->args[2]);
}
else if (strcmp(names[9], node->func) == 0){
- fprintf(f, "\n}\n");
+ snprintf(out, MAXOUTLEN, "}\n");
}
else if (strcmp(names[10], node->func) == 0){
- fprintf(f, "printf(\"");
- fprintf(f, "%%d\\n");
- fprintf(f, "\", %s);", node->args[0]);
+ snprintf(out, MAXOUTLEN, "printf(\"");
+ snprintf(out, MAXOUTLEN, "%%d\\n");
+ snprintf(out, MAXOUTLEN, "\", %s);", node->args[0]);
}
else if (strcmp(names[11], node->func) == 0){
- fprintf(f, "%s %s(", node->args[1], node->args[0]);
+ snprintf(out, MAXOUTLEN, "%s %s(", node->args[1], node->args[0]);
int i = 2;
while (node->args[i] != NULL){
- vartypeToC(node->args[i], f);
+ vartypeToC(node->args[i], out);
i++;
}
- fprintf(f, ");\n");
+ snprintf(out, MAXOUTLEN, ");\n");
}
else if (strcmp(names[12], node->func) == 0){
- reversepolishToC(node->children[0], f);
+ reversepolishToC(node->children[0], out);
}
else {
- fprintf(f, "%s(", node->func);
+ snprintf(out, MAXOUTLEN, "%s(", node->func);
int i = 0;
while (node->args[i] != NULL){
- fprintf(f, "%s", node->args[i]);
+ snprintf(out, MAXOUTLEN, "%s", node->args[i]);
i++;
}
- fprintf(f, ");\n");
+ snprintf(out, MAXOUTLEN, ");\n");
}
}
diff --git a/comp/lucas-standen-NEA/code2/comp.h b/comp/lucas-standen-NEA/code2/comp.h
index b04056f..7094e2a 100644
--- a/comp/lucas-standen-NEA/code2/comp.h
+++ b/comp/lucas-standen-NEA/code2/comp.h
@@ -1,3 +1,6 @@
#include "tokenizer.h"
#include <stdio.h>
-void compile(astNode *node, FILE *f);
+
+#define MAXOUTLEN 512
+void compile(astNode *node, char *out);
+
diff --git a/comp/lucas-standen-NEA/code2/gdb.core b/comp/lucas-standen-NEA/code2/gdb.core
deleted file mode 100644
index 046f004..0000000
--- a/comp/lucas-standen-NEA/code2/gdb.core
+++ /dev/null
Binary files differ
diff --git a/comp/lucas-standen-NEA/code2/parser.c b/comp/lucas-standen-NEA/code2/parser.c
index 7650c4f..e15e545 100644
--- a/comp/lucas-standen-NEA/code2/parser.c
+++ b/comp/lucas-standen-NEA/code2/parser.c
@@ -25,7 +25,8 @@ strings *parse(FILE *f){
char *line = alloca(256);
int count = 0;
while (fgets(line, 256, f) != NULL){
- if (line[0] != '\n'){
+ if (line[0] != '\n'){
+ if (line[0] == '\t') line++;
line[strlen(line)-1] = '\0';
strs->strs[count] = malloc(256);
memcpy(strs->strs[count], line, 256);
diff --git a/comp/lucas-standen-NEA/code2/sample b/comp/lucas-standen-NEA/code2/sample
index d026169..28ed492 100755
--- a/comp/lucas-standen-NEA/code2/sample
+++ b/comp/lucas-standen-NEA/code2/sample
Binary files differ
diff --git a/comp/lucas-standen-NEA/code2/sample.zpy b/comp/lucas-standen-NEA/code2/sample.zpy
index b4bfacb..142e498 100644
--- a/comp/lucas-standen-NEA/code2/sample.zpy
+++ b/comp/lucas-standen-NEA/code2/sample.zpy
@@ -1,6 +1,3 @@
-(let a:int (+ 65 2))
-(symbol putchar int c:int)
(defun main int)
-(putchar a)
-
+ (putchar a)
(endfun)
diff --git a/comp/lucas-standen-NEA/code2/zpy b/comp/lucas-standen-NEA/code2/zpy
index 2534f0c..101d904 100755
--- a/comp/lucas-standen-NEA/code2/zpy
+++ b/comp/lucas-standen-NEA/code2/zpy
Binary files differ
diff --git a/comp/lucas-standen-NEA/code2/zpy.c b/comp/lucas-standen-NEA/code2/zpy.c
index 6e22b7b..5897e2f 100644
--- a/comp/lucas-standen-NEA/code2/zpy.c
+++ b/comp/lucas-standen-NEA/code2/zpy.c
@@ -25,7 +25,10 @@ int main(int argc, char **argv){
stringTokens->strs[i]++;
stringTokens->strs[i][strlen(stringTokens->strs[i]) - 1] = '\0';
astNode *line = tokenize(stringTokens->strs[i]);
- compile(line, stdout);
+ char *out = malloc(MAXOUTLEN);
+ compile(line, out);
+ printf("%s", out);
+ free(out);
}
diff --git a/comp/lucas-standen-NEA/code2/zpy.core b/comp/lucas-standen-NEA/code2/zpy.core
deleted file mode 100644
index a9fb131..0000000
--- a/comp/lucas-standen-NEA/code2/zpy.core
+++ /dev/null
Binary files differ
diff --git a/comp/lucas-standen-NEA/code2/zpy.sh b/comp/lucas-standen-NEA/code2/zpy.sh
index 7dc663e..dbbbdbd 100755
--- a/comp/lucas-standen-NEA/code2/zpy.sh
+++ b/comp/lucas-standen-NEA/code2/zpy.sh
@@ -1,2 +1,3 @@
#!/bin/sh
-./zpy $1 | cc -x c - -Wno-implicit -Wno-missing-declarations -o $2
+CC=cc
+./zpy $1 | ${CC} -x c - -Wno-implicit -Wno-missing-declarations -o $2