summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code/parser
diff options
context:
space:
mode:
Diffstat (limited to 'comp/lucas-standen-NEA/code/parser')
-rw-r--r--comp/lucas-standen-NEA/code/parser/Makefile12
-rwxr-xr-xcomp/lucas-standen-NEA/code/parser/parserbin0 -> 20880 bytes
-rw-r--r--comp/lucas-standen-NEA/code/parser/parser.c32
-rw-r--r--comp/lucas-standen-NEA/code/parser/preprocessor.c24
-rw-r--r--comp/lucas-standen-NEA/code/parser/preprocessor.h5
-rw-r--r--comp/lucas-standen-NEA/code/parser/readfile.c61
-rw-r--r--comp/lucas-standen-NEA/code/parser/readfile.h1
-rw-r--r--comp/lucas-standen-NEA/code/parser/sample.zpy15
8 files changed, 150 insertions, 0 deletions
diff --git a/comp/lucas-standen-NEA/code/parser/Makefile b/comp/lucas-standen-NEA/code/parser/Makefile
new file mode 100644
index 0000000..9325d95
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/Makefile
@@ -0,0 +1,12 @@
+all: readfile preprocesor parser
+ cc readfile.o preprocessor.o parser.o -o parser
+
+readfile:
+ cc -c readfile.c -o readfile.o
+preprocesor:
+ cc -c preprocessor.c -o preprocessor.o
+parser: parser.c
+ cc -c parser.c -o parser.o
+
+clean:
+ rm -rf *.o parser
diff --git a/comp/lucas-standen-NEA/code/parser/parser b/comp/lucas-standen-NEA/code/parser/parser
new file mode 100755
index 0000000..9d996a8
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/parser
Binary files differ
diff --git a/comp/lucas-standen-NEA/code/parser/parser.c b/comp/lucas-standen-NEA/code/parser/parser.c
new file mode 100644
index 0000000..3162841
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/parser.c
@@ -0,0 +1,32 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdbool.h>
+
+#include "preprocessor.h"
+
+int main(int argc, char **argv){
+ if (argc <= 1){
+ printf("no args given!\n");
+ return 1;
+ }
+ char *code = preprocessor(argc, argv);
+ if (code == NULL){
+ printf("falled to open file\n");
+ return 1;
+ }
+ for (int i = 0; i < strlen(code); i++){
+ if (code[i] == '{'){
+ printf("\nopen-scope\n");
+ } else if (code[i] == '}'){
+ printf("\nclose-scope\n");
+ }else {
+ if (code[i] == '(')
+ printf("\n");
+ else if (code[i] != ')')
+ printf("%c", code[i]);
+ }
+ }
+ printf("\n");
+ free(code);
+ return 0;
+}
diff --git a/comp/lucas-standen-NEA/code/parser/preprocessor.c b/comp/lucas-standen-NEA/code/parser/preprocessor.c
new file mode 100644
index 0000000..92c6127
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/preprocessor.c
@@ -0,0 +1,24 @@
+#include <stdbool.h>
+#include <string.h>
+
+#include "readfile.h"
+
+char *preprocessor(int argc, char **argv){
+ char *buf = readfile(argv[1]);
+ if (buf == NULL)
+ return NULL;
+
+ int i = 0;
+
+ while (buf[i] != '\0'){
+ if (buf[i] == '\n'){
+ buf[i] = ' ';
+ }
+ if (buf[i] == '\t'){
+ buf[i] = ' ';
+ }
+ i++;
+ }
+
+ return buf;
+}
diff --git a/comp/lucas-standen-NEA/code/parser/preprocessor.h b/comp/lucas-standen-NEA/code/parser/preprocessor.h
new file mode 100644
index 0000000..855240f
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/preprocessor.h
@@ -0,0 +1,5 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+char *preprocessor(int argc, char **argv);
diff --git a/comp/lucas-standen-NEA/code/parser/readfile.c b/comp/lucas-standen-NEA/code/parser/readfile.c
new file mode 100644
index 0000000..391d5a5
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/readfile.c
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+bool instring = false;
+
+char *readfile(char *filepath){
+ FILE *fptr;
+ fptr = fopen(filepath, "r");
+
+ if (fptr == NULL)
+ return NULL;
+ int size = 10;
+ char *buf = malloc(size);
+ char c;
+
+ int i = 0;
+
+ buf = buf+i;
+ buf[0] = '{';
+ buf = buf-i;
+
+ i++;
+
+ while ((c = getc(fptr)) != EOF){
+ if (i > size + 1){
+ size = size + 10;
+ buf = realloc(buf, size);
+ }
+ if (c == '"'){
+ if (instring == false)
+ instring = true;
+ else
+ instring = false;
+ }
+
+ if (c == '!' && instring == false){
+ while ((c = getc(fptr)) != EOF && c != '\n'){}
+ }
+ buf = buf+i;
+ buf[0] = c;
+ buf = buf-i;
+ i++;
+
+ }
+
+ buf = buf+i;
+ buf[0] = '}';
+ buf = buf-i;
+
+ i++;
+
+ buf = buf+i;
+ buf[0] = '\0';
+ buf = buf-i;
+
+ fclose(fptr);
+
+ return buf;
+}
diff --git a/comp/lucas-standen-NEA/code/parser/readfile.h b/comp/lucas-standen-NEA/code/parser/readfile.h
new file mode 100644
index 0000000..12d98ec
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/readfile.h
@@ -0,0 +1 @@
+char *readfile(char *filepath);
diff --git a/comp/lucas-standen-NEA/code/parser/sample.zpy b/comp/lucas-standen-NEA/code/parser/sample.zpy
new file mode 100644
index 0000000..e289d9d
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/parser/sample.zpy
@@ -0,0 +1,15 @@
+{
+(let fib:function
+(defun num:i32 i32
+ (if (< num 2)
+ (return num)
+ )
+ (else
+ (return (+ (fib (- num 1)) (fib (- num 2)) ))
+ )
+))
+}
+(let a:i32 (fib 5))
+(const str[]:char "hello!")
+! returns the 5th fib number
+(const str[]:char "hello!")