summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--comp/cw/code/parser/Makefile12
-rwxr-xr-xcomp/cw/code/parser/parserbin0 -> 20880 bytes
-rw-r--r--comp/cw/code/parser/parser.c32
-rw-r--r--comp/cw/code/parser/parser.obin0 -> 2256 bytes
-rw-r--r--comp/cw/code/parser/preprocessor.c24
-rw-r--r--comp/cw/code/parser/preprocessor.h5
-rw-r--r--comp/cw/code/parser/preprocessor.obin0 -> 1504 bytes
-rw-r--r--comp/cw/code/parser/readfile.c61
-rw-r--r--comp/cw/code/parser/readfile.h1
-rw-r--r--comp/cw/code/parser/readfile.obin0 -> 2208 bytes
-rw-r--r--comp/cw/code/parser/sample.zpy15
-rw-r--r--comp/cw/code/tokenizer/ads/dict/Makefile4
-rw-r--r--comp/cw/code/tokenizer/ads/dict/dict.c29
-rw-r--r--comp/cw/code/tokenizer/ads/dict/dict.h9
-rw-r--r--comp/cw/code/tokenizer/ads/dict/dict.obin0 -> 1768 bytes
-rwxr-xr-xcomp/cw/code/tokenizer/ads/dict/dicttestbin0 -> 20536 bytes
-rw-r--r--comp/cw/code/tokenizer/ads/dict/dicttest.c10
-rw-r--r--comp/cw/code/tokenizer/ads/dll/Makefile5
-rw-r--r--comp/cw/code/tokenizer/ads/dll/dll.c62
-rw-r--r--comp/cw/code/tokenizer/ads/dll/dll.h19
-rw-r--r--comp/cw/code/tokenizer/ads/dll/dll.obin0 -> 2424 bytes
-rwxr-xr-xcomp/cw/code/tokenizer/ads/dll/dlltestbin0 -> 20640 bytes
-rw-r--r--comp/cw/code/tokenizer/ads/dll/dlltest.c20
-rw-r--r--comp/cw/code/tokenizer/ads/ll/Makefile5
-rw-r--r--comp/cw/code/tokenizer/ads/ll/ll.c50
-rw-r--r--comp/cw/code/tokenizer/ads/ll/ll.h15
-rw-r--r--comp/cw/code/tokenizer/ads/ll/ll.obin0 -> 2184 bytes
-rwxr-xr-xcomp/cw/code/tokenizer/ads/ll/lltestbin0 -> 20592 bytes
-rw-r--r--comp/cw/code/tokenizer/ads/ll/lltest.c18
29 files changed, 396 insertions, 0 deletions
diff --git a/comp/cw/code/parser/Makefile b/comp/cw/code/parser/Makefile
new file mode 100644
index 0000000..9325d95
--- /dev/null
+++ b/comp/cw/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/cw/code/parser/parser b/comp/cw/code/parser/parser
new file mode 100755
index 0000000..9d996a8
--- /dev/null
+++ b/comp/cw/code/parser/parser
Binary files differ
diff --git a/comp/cw/code/parser/parser.c b/comp/cw/code/parser/parser.c
new file mode 100644
index 0000000..3162841
--- /dev/null
+++ b/comp/cw/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/cw/code/parser/parser.o b/comp/cw/code/parser/parser.o
new file mode 100644
index 0000000..baccd37
--- /dev/null
+++ b/comp/cw/code/parser/parser.o
Binary files differ
diff --git a/comp/cw/code/parser/preprocessor.c b/comp/cw/code/parser/preprocessor.c
new file mode 100644
index 0000000..92c6127
--- /dev/null
+++ b/comp/cw/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/cw/code/parser/preprocessor.h b/comp/cw/code/parser/preprocessor.h
new file mode 100644
index 0000000..855240f
--- /dev/null
+++ b/comp/cw/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/cw/code/parser/preprocessor.o b/comp/cw/code/parser/preprocessor.o
new file mode 100644
index 0000000..fad2c87
--- /dev/null
+++ b/comp/cw/code/parser/preprocessor.o
Binary files differ
diff --git a/comp/cw/code/parser/readfile.c b/comp/cw/code/parser/readfile.c
new file mode 100644
index 0000000..391d5a5
--- /dev/null
+++ b/comp/cw/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/cw/code/parser/readfile.h b/comp/cw/code/parser/readfile.h
new file mode 100644
index 0000000..12d98ec
--- /dev/null
+++ b/comp/cw/code/parser/readfile.h
@@ -0,0 +1 @@
+char *readfile(char *filepath);
diff --git a/comp/cw/code/parser/readfile.o b/comp/cw/code/parser/readfile.o
new file mode 100644
index 0000000..32bc31d
--- /dev/null
+++ b/comp/cw/code/parser/readfile.o
Binary files differ
diff --git a/comp/cw/code/parser/sample.zpy b/comp/cw/code/parser/sample.zpy
new file mode 100644
index 0000000..e289d9d
--- /dev/null
+++ b/comp/cw/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!")
diff --git a/comp/cw/code/tokenizer/ads/dict/Makefile b/comp/cw/code/tokenizer/ads/dict/Makefile
new file mode 100644
index 0000000..f224267
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/Makefile
@@ -0,0 +1,4 @@
+all: dict.c
+ cc dict.c -c -o dict.o
+test: all
+ cc dict.o dicttest.c -o dicttest
diff --git a/comp/cw/code/tokenizer/ads/dict/dict.c b/comp/cw/code/tokenizer/ads/dict/dict.c
new file mode 100644
index 0000000..551afca
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/dict.c
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct dict_t {
+ int id;
+ void *data;
+}dict_t;
+
+dict_t *dictalloc(){
+ dict_t *output = malloc(sizeof(dict_t));
+ return output;
+}
+
+int dictset(dict_t *dict, int id, void *data){
+ dict->id = id;
+
+ dict->data = malloc(sizeof(data));
+ if (dict->data == NULL)
+ return 1;
+ memcpy(dict->data, data, sizeof(data));
+
+ return 0;
+}
+
+void dictfree(dict_t *dict){
+ free(dict->data);
+ free(dict);
+}
+
diff --git a/comp/cw/code/tokenizer/ads/dict/dict.h b/comp/cw/code/tokenizer/ads/dict/dict.h
new file mode 100644
index 0000000..e6ab69d
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/dict.h
@@ -0,0 +1,9 @@
+typedef struct dict_t {
+ int id;
+ void *data;
+}dict_t;
+
+dict_t *dictalloc();
+int dictset(dict_t *dict, int id, void *data);
+void dictfree(dict_t *dict);
+
diff --git a/comp/cw/code/tokenizer/ads/dict/dict.o b/comp/cw/code/tokenizer/ads/dict/dict.o
new file mode 100644
index 0000000..aefd77a
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/dict.o
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/dict/dicttest b/comp/cw/code/tokenizer/ads/dict/dicttest
new file mode 100755
index 0000000..dddf2a0
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/dicttest
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/dict/dicttest.c b/comp/cw/code/tokenizer/ads/dict/dicttest.c
new file mode 100644
index 0000000..4a20870
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dict/dicttest.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+#include "dict.h"
+
+int main(){
+ dict_t *dict = dictalloc();
+ dictset(dict, 1, "hello");
+ printf("%d:%s\n", dict->id, (char *)dict->data);
+ dictfree(dict);
+}
diff --git a/comp/cw/code/tokenizer/ads/dll/Makefile b/comp/cw/code/tokenizer/ads/dll/Makefile
new file mode 100644
index 0000000..651681d
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/Makefile
@@ -0,0 +1,5 @@
+all: dll.c
+ cc dll.c -c -o dll.o
+
+test: all
+ cc dll.o dlltest.c -o dlltest
diff --git a/comp/cw/code/tokenizer/ads/dll/dll.c b/comp/cw/code/tokenizer/ads/dll/dll.c
new file mode 100644
index 0000000..b24b13f
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/dll.c
@@ -0,0 +1,62 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct dll_t dll_t;
+
+typedef struct dll_t {
+ void *data;
+ dll_t *next;
+ dll_t *prev;
+} dll_t;
+
+dll_t *dllalloc(){
+ dll_t *output = malloc(sizeof(dll_t));
+ if (output == NULL)
+ return NULL;
+ output->next = NULL;
+ output->prev = NULL;
+ return output;
+}
+
+void dllsetdata(dll_t *node, void *data){
+ node->data = malloc(sizeof(data));
+ memcpy(node->data, data, sizeof(data));
+}
+
+void dllsetnext(dll_t *node, dll_t *next){
+ if (node->next == NULL) {
+ node->next = next;
+ node->next->prev = node;
+ }
+ else
+ dllsetnext(node->next, next);
+}
+void dllsetprev(dll_t *node, dll_t *prev){
+ if (node->prev == NULL) {
+ node->prev = prev;
+ node->prev->next = node;
+ }
+ else
+ dllsetprev(node->prev, prev);
+}
+
+void *dllgetat(dll_t *head, int index){
+ if (index == 0)
+ return head->data;
+ else {
+ if (head->next != NULL) {
+ return dllgetat(head->next, index - 1);
+ }else {
+ return NULL;
+ }
+ }
+}
+
+void dllfreeall(dll_t *head){
+ if (head->next != NULL)
+ dllfreeall(head->next);
+ free(head->data);
+ free(head);
+}
+
diff --git a/comp/cw/code/tokenizer/ads/dll/dll.h b/comp/cw/code/tokenizer/ads/dll/dll.h
new file mode 100644
index 0000000..44940ce
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/dll.h
@@ -0,0 +1,19 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct dll_t dll_t;
+
+typedef struct dll_t {
+ void *data;
+ dll_t *next;
+ dll_t *prev;
+} dll_t;
+
+dll_t *dllalloc();
+void dllsetdata(dll_t *node, void *data);
+void dllsetnext(dll_t *node, dll_t *next);
+void dllsetprev(dll_t *node, dll_t *prev);
+void *dllgetat(dll_t *head, int index);
+void dllfreeall(dll_t *head);
+
diff --git a/comp/cw/code/tokenizer/ads/dll/dll.o b/comp/cw/code/tokenizer/ads/dll/dll.o
new file mode 100644
index 0000000..2c9a145
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/dll.o
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/dll/dlltest b/comp/cw/code/tokenizer/ads/dll/dlltest
new file mode 100755
index 0000000..83f900c
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/dlltest
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/dll/dlltest.c b/comp/cw/code/tokenizer/ads/dll/dlltest.c
new file mode 100644
index 0000000..4544d2e
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/dll/dlltest.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+#include "dll.h"
+
+int main(){
+ dll_t *head = dllalloc();
+ dllsetdata(head, "hello");
+
+ for (int i = 0; i < 3; i++){
+ dll_t *node = dllalloc();
+ dllsetdata(node, "hi");
+ dllsetnext(head, node);
+ }
+
+ for (int i = 0; i < 4; i++)
+ printf("%s\n", (char *)dllgetat(head, i));
+ printf("%s\n", (char *)head->prev->next->data);
+
+ dllfreeall(head);
+}
diff --git a/comp/cw/code/tokenizer/ads/ll/Makefile b/comp/cw/code/tokenizer/ads/ll/Makefile
new file mode 100644
index 0000000..aaf0241
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/Makefile
@@ -0,0 +1,5 @@
+all: ll.c
+ cc ll.c -c -o ll.o
+
+test: all
+ cc ll.o lltest.c -o lltest
diff --git a/comp/cw/code/tokenizer/ads/ll/ll.c b/comp/cw/code/tokenizer/ads/ll/ll.c
new file mode 100644
index 0000000..c45ab0c
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/ll.c
@@ -0,0 +1,50 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct ll_t ll_t;
+
+typedef struct ll_t {
+ void *data;
+ ll_t *next;
+} ll_t;
+
+ll_t *llalloc(){
+ ll_t *output = malloc(sizeof(ll_t));
+ if (output == NULL)
+ return NULL;
+ output->next = NULL;
+ return output;
+}
+
+void llsetdata(ll_t *node, void *data){
+ node->data = malloc(sizeof(data));
+ memcpy(node->data, data, sizeof(data));
+}
+
+void llsetnext(ll_t *node, ll_t *next){
+ if (node->next == NULL)
+ node->next = next;
+ else
+ llsetnext(node->next, next);
+}
+
+void *llgetat(ll_t *head, int index){
+ if (index == 0)
+ return head->data;
+ else {
+ if (head->next != NULL) {
+ return llgetat(head->next, index - 1);
+ }else {
+ return NULL;
+ }
+ }
+}
+
+void llfreeall(ll_t *head){
+ if (head->next != NULL)
+ llfreeall(head->next);
+ free(head->data);
+ free(head);
+}
+
diff --git a/comp/cw/code/tokenizer/ads/ll/ll.h b/comp/cw/code/tokenizer/ads/ll/ll.h
new file mode 100644
index 0000000..30830b1
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/ll.h
@@ -0,0 +1,15 @@
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct ll_t ll_t;
+
+typedef struct ll_t {
+ void *data;
+ ll_t *next;
+} ll_t;
+
+ll_t *llalloc();
+void llsetdata(ll_t *node, void *data);
+void llsetnext(ll_t *node, ll_t *next);
+void *llgetat(ll_t *head, int index);
+void llfreeall(ll_t *head);
diff --git a/comp/cw/code/tokenizer/ads/ll/ll.o b/comp/cw/code/tokenizer/ads/ll/ll.o
new file mode 100644
index 0000000..b033278
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/ll.o
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/ll/lltest b/comp/cw/code/tokenizer/ads/ll/lltest
new file mode 100755
index 0000000..b98c5de
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/lltest
Binary files differ
diff --git a/comp/cw/code/tokenizer/ads/ll/lltest.c b/comp/cw/code/tokenizer/ads/ll/lltest.c
new file mode 100644
index 0000000..8aa6514
--- /dev/null
+++ b/comp/cw/code/tokenizer/ads/ll/lltest.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#include "ll.h"
+
+int main(){
+ ll_t *head = llalloc();
+ llsetdata(head, "hello");
+
+ for (int i = 0; i < 3; i++){
+ ll_t *node = llalloc();
+ llsetdata(node, "hi");
+ llsetnext(head, node);
+ }
+ for (int i = 0; i < 4; i++)
+ printf("%s\n", (char *)llgetat(head, i));
+
+ llfreeall(head);
+}