diff options
author | Thing1 <thing1@seacrossedlovers.xyz> | 2024-09-10 16:36:22 +0100 |
---|---|---|
committer | Thing1 <thing1@seacrossedlovers.xyz> | 2024-09-10 16:36:22 +0100 |
commit | fe89cc56e2aa7fa119e2251d104acde37d632cd9 (patch) | |
tree | bc3f21ac2e998b292dd836c745c308dbe63e1221 /comp/lucas-standen-NEA/code2 | |
parent | 9b83439d9d0204a5092772ae46ef43cea42dbc7c (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/Makefile | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code2/comp.c | 90 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code2/comp.h | 5 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code2/gdb.core | bin | 10729440 -> 0 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code2/parser.c | 3 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code2/sample | bin | 6432 -> 15496 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code2/sample.zpy | 5 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code2/zpy | bin | 24216 -> 31600 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code2/zpy.c | 5 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code2/zpy.core | bin | 299160 -> 0 bytes | |||
-rwxr-xr-x | comp/lucas-standen-NEA/code2/zpy.sh | 3 |
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 Binary files differdeleted file mode 100644 index 046f004..0000000 --- a/comp/lucas-standen-NEA/code2/gdb.core +++ /dev/null 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 Binary files differindex d026169..28ed492 100755 --- a/comp/lucas-standen-NEA/code2/sample +++ b/comp/lucas-standen-NEA/code2/sample 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 Binary files differindex 2534f0c..101d904 100755 --- a/comp/lucas-standen-NEA/code2/zpy +++ b/comp/lucas-standen-NEA/code2/zpy 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 Binary files differdeleted file mode 100644 index a9fb131..0000000 --- a/comp/lucas-standen-NEA/code2/zpy.core +++ /dev/null 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 |