diff options
Diffstat (limited to 'comp/lucas-standen-NEA')
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/Makefile | 9 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/tokenizer/tokenizer | bin | 24392 -> 28928 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/tokenizer.c | 186 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/tokenizer.h | 0 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/tokenizer/types.h | 25 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/coverpage.ms | 234 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/coverpage.ps | 425 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/questions-for-amy.ps | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/questions-for-rayn.ms | 15 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/questions-for-rayn.ps | 276 |
10 files changed, 356 insertions, 816 deletions
diff --git a/comp/lucas-standen-NEA/code/tokenizer/Makefile b/comp/lucas-standen-NEA/code/tokenizer/Makefile index 479b838..b09f177 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/Makefile +++ b/comp/lucas-standen-NEA/code/tokenizer/Makefile @@ -1,10 +1,9 @@ tokenizer: parser util tokenizer.c - cc -O3 tokenizer.c parser.o util.o -o tokenizer + cc -O3 tokenizer.c parser.o util.o -o tokenizer -ggdb parser: parser.c - cc -O3 parser.c -c -o parser.o -util: util.c - cc -O3 util.c -c -o util.o - + cc -O3 parser.c -c -o parser.o -ggdb +util: util.c + cc -O3 util.c -c -o util.o -ggdb clean: rm -rf *.o rm -rf tokenizer diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer b/comp/lucas-standen-NEA/code/tokenizer/tokenizer Binary files differindex 726ee21..ab76521 100755 --- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer +++ b/comp/lucas-standen-NEA/code/tokenizer/tokenizer diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c index 5cc596f..f94b640 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c +++ b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c @@ -1,154 +1,128 @@ -#include <stdlib.h> #include <stdio.h> #include <string.h> -#include "parser.h" -#include "util.h" #include "types.h" +#include "util.h" -int functionIdCounter = 0; - -ast_node *GenAst(char *exp); // generates the ast of 1 expression -int getArgCount(char *exp); // counts how many args are pressent in exp -char **GetStringArgs(char *exp); // gets the string args of an expression -char *GetFunction(char *exp); // gets the function used in 1 expression -builtInFuncs IsBuiltIn(char *func); // returns the id of a function thats built in, or -1 if its not - - -builtInFuncs IsBuiltIn(char *func){ +void getBuiltIn(char *func, ast_node *node){ if (strcmp(func, "defun") == 0){ - return DEFUN; + node->func->builtInFunc = DEFUN; }else if (strcmp(func, "let") == 0){ - return LET; + node->func->builtInFunc = LET; }else if (strcmp(func, "set") == 0){ - return SET; + node->func->builtInFunc = SET; }else if (strcmp(func, "if") == 0){ - return IF; + node->func->builtInFunc = IF; }else if (strcmp(func, "elif") == 0){ - return ELIF; + node->func->builtInFunc = ELIF; }else if (strcmp(func, "else") == 0){ - return ELSE; + node->func->builtInFunc = ELSE; }else if (strcmp(func, "for") == 0){ - return FOR; + node->func->builtInFunc = FOR; }else if (strcmp(func, "while") == 0){ - return WHILE; + node->func->builtInFunc = WHILE; }else if (strcmp(func, "symbol") == 0){ - return SYMBOL; - }else if (strcmp(func, "struct") == 0){ - return STRUCT; + node->func->builtInFunc = SYMBOL; }else if (strcmp(func, "+") == 0){ - return ADD; + node->func->builtInFunc = ADD; }else if (strcmp(func, "-") == 0){ - return SUB; + node->func->builtInFunc = SUB; }else if (strcmp(func, "*") == 0){ - return MUL; + node->func->builtInFunc = MUL; }else if (strcmp(func, "/") == 0){ - return DIV; + node->func->builtInFunc = DIV; }else if (strcmp(func, "=") == 0){ - return EQ; + node->func->builtInFunc = EQ; }else if (strcmp(func, "!=") == 0){ - return NEQ; + node->func->builtInFunc = NEQ; }else if (strcmp(func, ">") == 0){ - return GT; + node->func->builtInFunc = GT; }else if (strcmp(func, "<") == 0){ - return LT; + node->func->builtInFunc = LT; }else if (strcmp(func, ">=") == 0){ - return GTEQ; + node->func->builtInFunc = GTEQ; }else if (strcmp(func, "<=") == 0){ - return LTEQ; + node->func->builtInFunc = LTEQ; }else if (strcmp(func, "cast") == 0){ - return CAST; + node->func->builtInFunc = CAST; }else if (strcmp(func, "typeof") == 0){ - return TYPEOF; - }else if (strcmp(func, "terminate") == 0){ - return TERMINATE; + node->func->builtInFunc = TYPEOF; + }else if (strcmp(func, "exit") == 0){ + node->func->builtInFunc = EXIT; }else if (strcmp(func, "return") == 0){ - return RETURN; + node->func->builtInFunc = RETURN; } else { - return -1; + node->func->builtInFunc = -1; } } -char *GetFunction(char *exp){ // takes exp with brackets - char *out = CheckedMalloc(strlen(exp)); - int i = 1; - char c = exp[i]; - while (c != ' '){ - out[i-1] = c; - i++; - c = exp[i]; +ll_t *getUserDefinedFunction(char *function); + +void expressFunction(char *function, ast_node *node){ + if ((node->func->builtInFunc = getBuiltIn(function)) == -1){ + node->func->func = getUserDefinedFunction(function); + } else { + node->func->func = NULL; } - i++; - out[i] = '\0'; - out = CheckedRealloc(out, i); - return out; } -// TODO make it count any arg inside () as one arg -char **GetStringArgs(char *exp){ // takes exp without brackets - int spaceCount = 0; - int i = 0; - char c = exp[i]; - while (c != '\0'){ - spaceCount++; - i++; - c = exp[i]; - +ast_node *tokenize(char *input){ + ast_node *node; + + char *exp, *function, **args; + size_t i, j; + int depth; + + for (int i = 0; i < strlen(input); i++){ + if (input[i] == '('){ + depth = 1; + j = i; + exp = CheckedMalloc(strlen(input)); + while (depth != 0){ + if (input[j] == '('){ + depth++; + } else if (input[j] == ')'){ + depth--; + } + exp[j - i] = input[j+1]; + j++; + if (input[j] == '\0'){ + fprintf(stderr, "error brace not closed"); + exit(1); + } + } + j -= 2; + exp[j] = '\0'; + printf("%s\n", exp); + }else if (input[i] == '"'){ + i++; + while (input[i] != '"') i++; + } } - char **out = CheckedMalloc(spaceCount); - for (int i = 0; i < spaceCount; i++){ - out[i] = CheckedMalloc(strlen(exp)); - } + node = CheckedMalloc(sizeof(ast_node)); - int tokCounter = 0; i = 0; - int charCounter = 0; - while (exp[i] != '\0'){ - if (exp[i] != ' '){ - if (tokCounter != 0){ - out[tokCounter-1][charCounter] = exp[i]; - charCounter++; - } - } else{ - out[tokCounter][i] = '\0'; - charCounter = 0; - tokCounter++; - } - i++; + function = CheckedMalloc(strlen(exp)); + while (exp[i] != ' '){ + function[i] = exp[i]; + i++; } - return out; -} + function[i] = '\0'; + function = CheckedRealloc(function, i); + printf("%s\n", function); -ast_node *GenAst(char *exp){ // takes exp with brackets - ast_node *head = CheckedMalloc(sizeof(ast_node)); - char *function = GetFunction(exp); - head->builtInFunc = IsBuiltIn(function); - free(function); + expressFunction(function, node); - if (head->builtInFunc == -1){ - head->func = CheckedMalloc(sizeof(functionToken)); - head->func->id = functionIdCounter; - functionIdCounter++; - }else { - head->func = NULL; - } + free(function); + free(exp); - return head; + return NULL; } int main(){ - ast_node *node = GenAst("(+ 1 2)"); - printf("%d\n", node->builtInFunc); - - char **args = GetStringArgs("+ 1 2"); - for (int i = 0; i < 2; i++){ - printf("%s\n", args[i]); - } - - free(args); - - free(node); + char sample[] = "(+ \"hello(\" 1)"; + tokenize(sample); } diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h deleted file mode 100644 index e69de29..0000000 --- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h +++ /dev/null diff --git a/comp/lucas-standen-NEA/code/tokenizer/types.h b/comp/lucas-standen-NEA/code/tokenizer/types.h index 034dc04..82eb3df 100644 --- a/comp/lucas-standen-NEA/code/tokenizer/types.h +++ b/comp/lucas-standen-NEA/code/tokenizer/types.h @@ -10,8 +10,6 @@ typedef enum types { FLOAT_t = 4, CHAR_T = 5, FUNCTION_T = 6, - STRUCT_T = 7, - OBJ_T = 8, } types; // int types @@ -24,14 +22,6 @@ typedef uint64_t u64; // char and float types are still called char and float so no typedef needed -// function type -typedef struct functionToken { - int id; // a function id to avoid strings - types returnType; // what the function returns - types *args; // the types of args a function takes - ll_t astHead; // the code for the function -} functionToken; - // built in functions typedef enum builtInFuncs { DEFUN = 0, @@ -43,7 +33,6 @@ typedef enum builtInFuncs { FOR = 6, WHILE = 7, SYMBOL = 8, - STRUCT = 9, // arithmetic ADD = 10, @@ -61,14 +50,24 @@ typedef enum builtInFuncs { CAST = 20, TYPEOF = 21, - TERMINATE = 22, + EXIT = 22, RETURN = 23, } builtInFuncs; +// function type +typedef struct functionToken { + int id; // a function id to avoid strings + types returnType; // what the function returns + types *args; // the types of args a function takes + ll_t *func; // the code for the function + builtInFuncs builtInFunc; // a built in functions +} functionToken; + +// built in functions + typedef struct ast_node ast_node; typedef struct ast_node { - builtInFuncs builtInFunc; // if it's a builtin function call use this, else -1 functionToken *func; // if it's not builtin then use this void **literalArgs; // the args of the node, this will be an array of litteral values ast_node **args; // the non litteral tokens diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ms b/comp/lucas-standen-NEA/writeup/coverpage.ms index 230dc82..9e5fdc4 100644 --- a/comp/lucas-standen-NEA/writeup/coverpage.ms +++ b/comp/lucas-standen-NEA/writeup/coverpage.ms @@ -619,16 +619,9 @@ Advanced types .LP function - a function that can be used -struct - initializer for an object - -obj - instance of a struct - generic - should be avoided, removes checks for data types when inputting values to functions will cause many runtime errors, however when absolutely needed it is useful. -err - error type, can be given to terminate function to bring down the program, or have -info drawn on the error. - .NH 4 Arrays .LP @@ -657,19 +650,11 @@ defun Returns a function that take A and B as an argument (fixed types), and returns a value of returntype. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 let .LP (let x:type value) -.NH 5 -Errors -.LP -Can syntax error. Creates constant x of type type to value. @@ -679,10 +664,6 @@ set (set x:type value) Creates/recreates the variable value of x to value. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 if/elif/else @@ -699,10 +680,6 @@ Executes the function provided if the condition is true. Elif works the same, except only if the previous if statement is false. Else executes only if all previous statements were false. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 for @@ -711,11 +688,6 @@ for Runs the function while the condition is true, and increments i every time the function is called. -.NH 5 -Errors -.LP -Can syntax error. - .NH 4 while @@ -723,10 +695,6 @@ while (while condition function) Runs the function if the condition is true, keeps running until it is false. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 symbol @@ -736,53 +704,6 @@ symbol Returns a function that takes arguments A, B, C (of fixed types), the name of the function, and the file path of the elf. .NH 5 -Errors -.LP -Can syntax error. - -Can throw other errors, via returning an err type. - -.NH 4 -struct -.LP -(struct - _a:type - b:type - c:type - -) - -Returns a struct (a class) that can have a default value, the default value can be set -using an underscore in front of the variable name. A default variable will be returned -if you use the struct without specifying a value. - -Use let to assign it a name: - -(let a:struct (struct - ... - ... - ... - ) - -) - -Then to instantiate the struct use the following: - -(let a:obj struct) - -The struct argument needs to have been set prior. - -To read from the struct use this: - -(if (= a.num b.num) .... ) - -Or if you have set a default value you can use the following: - -(if (= a b.num) .... ) -.NH 5 -Errors -.LP -Can syntax error. .NH 4 Arithmetic operations @@ -813,10 +734,6 @@ All return true or false (=> a b) returns if a => b (=< a b) returns if a =< b -.NH 5 -Errors -.LP -Can syntax error. .NH 4 cast @@ -824,12 +741,6 @@ cast (cast a:generic type:char[]) returns a but cast to data type type, which is a string. -.NH 5 -Errors -.LP -Can syntax error. - -Can throw errors, via err, if value can't be cast to a given type. .NH 4 typeof @@ -837,10 +748,6 @@ typeof (typeof a:generic) returns in a string the type that variable A is. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 terminate @@ -848,10 +755,6 @@ terminate (terminate error:error) Kills the program at the current point, frees all related memory, prints error info stored in error. -.NH 5 -Errors -.LP -Can syntax error. .NH 4 return @@ -859,14 +762,77 @@ return (return a:type) Must be used in defun, returns "a" from the function, "a" must be of the functions return type. -.NH 5 -Errors + +.NH 3 +List of keywords .LP -Can syntax error. +defun + +for + +while + +if + +elif + +else + +exit + +return + +symbol + +set + +let + -Can throw errors via err. .NH 2 Questionnaire 2 for Rayn M +.NH 3 +How do you find this layout of the language? +.LP +.I "(5-6 points)" +- I like the immutable nature of the language +- I like the simplicity +- I like the low level performance this will have +- I dislike the word terminate +- I like the procedural approach, with the function robustness +- I dislike the brackets! +.NH 3 +Response +.LP +Although he does dislike some of my features I believe them to be core parts of the language so +I will keep them. I will also keep his points in mind though, I don't want to discourage learning +the language due to its abstract syntax. + +However as per his request I will change the terminate keyword to the more normal exit. + +An updated keyword list is as flows: + +defun + +for + +while + +if + +elif + +else + +terminate + +return + +symbol + +set + +let .NH 2 What language do you use to make a programming language @@ -939,71 +905,7 @@ becoming impossible to edit code. The file layout looks as follows: - Makefile - ads - Makefile - ast - Makefile - ast.c - ast.h - types.c - types.h - dict - Makefile - dict.c - dict.h - dicttest.c - ll - Makefile - ll.c - ll.h - lltest.c - execution - Makefile - exec.c - exec.h - types.c - types.h - libs - Makefile - graphs - graphs.zpy - io - io.zpy - stdlib - Makefile - stdlib.c - stdlib.zpy - string - string.zpy - proto - ast - Makefile - ast.c - astg.c - astg.h - tokenizer - Makefile - parser.c - parser.h - tokenizer.c - tokenizer.h - types.c - types.h - zpy - Makefile - zpy.c - zpycheck.c - zpycheck - Makefile - errors.c - errors.h - zpycheck.c - zpycheck.h - zpypkg - deps.zpy - download.zpy - zpypkg.zpy +PLACE HERE As you can see this is split up over around 40 files and 16 folders, each file should not go over ~500 lines of code. This is to keep everything as easy to manage as possible. diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ps b/comp/lucas-standen-NEA/writeup/coverpage.ps index 6e032c1..bfa3e02 100644 --- a/comp/lucas-standen-NEA/writeup/coverpage.ps +++ b/comp/lucas-standen-NEA/writeup/coverpage.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.23.0 -%%CreationDate: Tue May 21 15:38:13 2024 +%%CreationDate: Tue Jun 4 13:46:06 2024 %%DocumentNeededResources: font Times-Bold %%+ font Times-Italic %%+ font Times-Roman @@ -12,7 +12,7 @@ %%+ file linkedlist.ps %%+ procset grops 1.23 0 %%LanguageLevel: 2 -%%Pages: 20 +%%Pages: 19 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -52490,284 +52490,241 @@ BP (ger of size 64 bits)-.15 E(char - single ascii code)111 156 Q (\215oat - standard C \215oat)111 180 Q/F1 10/Times-Bold@0 SF 2.5 (3.1.1.2. Adv)111 216 R(anced types)-.1 E F0 -(function - a function that can be used)111 231.6 Q -(struct - initializer for an object)111 255.6 Q -(obj - instance of a struct)111 279.6 Q 1.005(generic - should be a)111 -303.6 R -.2(vo)-.2 G 1.005(ided, remo).2 F -.15(ve)-.15 G 3.505(sc).15 G -1.005(hecks for data types when inputting v)-3.505 F 1.005 -(alues to functions)-.25 F(will cause man)111 315.6 Q 2.5(yr)-.15 G +(function - a function that can be used)111 231.6 Q 1.005 +(generic - should be a)111 255.6 R -.2(vo)-.2 G 1.005(ided, remo).2 F +-.15(ve)-.15 G 3.505(sc).15 G 1.005 +(hecks for data types when inputting v)-3.505 F 1.005 +(alues to functions)-.25 F(will cause man)111 267.6 Q 2.5(yr)-.15 G (untime errors, ho)-2.5 E(we)-.25 E -.15(ve)-.25 G 2.5(rw).15 G -(hen absolutely needed it is useful.)-2.5 E .008 -(err - error type, can be gi)111 339.6 R -.15(ve)-.25 G 2.507(nt).15 G -2.507(ot)-2.507 G .007(erminate function to bring do)-2.507 F .007 -(wn the program, or ha)-.25 F .307 -.15(ve i)-.2 H .007(nfo dra).15 F -(wn)-.15 E(on the error)111 351.6 Q(.)-.55 E F1 2.5(3.1.1.3. Arrays)111 -387.6 R F0(Arrays can be sho)111 403.2 Q 2.5(wl)-.25 G(ik)-2.5 E 2.5(es) --.1 G(o:)-2.5 E(x:type[])111 427.2 Q -.4(Wi)111 451.2 S +(hen absolutely needed it is useful.)-2.5 E F1 2.5(3.1.1.3. Arrays)111 +303.6 R F0(Arrays can be sho)111 319.2 Q 2.5(wl)-.25 G(ik)-2.5 E 2.5(es) +-.1 G(o:)-2.5 E(x:type[])111 343.2 Q -.4(Wi)111 367.2 S (th x being the v).4 E(ariable name, type being the type of v)-.25 E (ariable, and [] sho)-.25 E(wing its an array)-.25 E -(All arrays are dynamic, represented by a link)111 475.2 Q -(ed list on the back end.)-.1 E F1 2.5(3.1.1.3.1. Strings)111 499.2 R F0 -(Strings, lik)111 514.8 Q 2.5(ei)-.1 G 2.5(nCa)-2.5 G -(re arrays of chars)-2.5 E F1 2.5(3.1.2. Built)111 550.8 R(in functions) -2.5 E 2.5(3.1.2.1. defun)111 574.8 R F0 -(\(defun a:type b:type returntype)111 590.4 Q(...)131 602.4 Q(...)131 -614.4 Q(\))111 638.4 Q .397(Returns a function that tak)111 662.4 R +(All arrays are dynamic, represented by a link)111 391.2 Q +(ed list on the back end.)-.1 E F1 2.5(3.1.1.3.1. Strings)111 415.2 R F0 +(Strings, lik)111 430.8 Q 2.5(ei)-.1 G 2.5(nCa)-2.5 G +(re arrays of chars)-2.5 E F1 2.5(3.1.2. Built)111 466.8 R(in functions) +2.5 E 2.5(3.1.2.1. defun)111 490.8 R F0 +(\(defun a:type b:type returntype)111 506.4 Q(...)131 518.4 Q(...)131 +530.4 Q(\))111 554.4 Q .398(Returns a function that tak)111 578.4 R 2.897(eAa)-.1 G .397(nd B as an ar)-2.897 F .397(gument \(\214x)-.18 F -.397(ed types\), and returns a v)-.15 F .398(alue of return-)-.25 F -(type.)111 674.4 Q F1 2.5(3.1.2.1.1. Err)111 698.4 R(ors)-.18 E F0 -(Can syntax error)111 714 Q(.)-.55 E 0 Cg EP +.397(ed types\), and returns a v)-.15 F .397(alue of return-)-.25 F +(type.)111 590.4 Q F1 2.5(3.1.2.2. let)111 626.4 R F0(\(let x:type v)111 +642 Q(alue\))-.25 E(Creates constant x of type type to v)111 666 Q +(alue.)-.25 E F1 2.5(3.1.2.3. set)111 702 R F0(\(set x:type v)111 717.6 +Q(alue\))-.25 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-14-)297.67 48 Q/F1 10/Times-Bold@0 SF 2.5 -(3.1.2.2. let)111 84 R F0(\(let x:type v)111 99.6 Q(alue\))-.25 E F1 2.5 -(3.1.2.2.1. Err)111 123.6 R(ors)-.18 E F0(Can syntax error)111 139.2 Q -(.)-.55 E(Creates constant x of type type to v)111 163.2 Q(alue.)-.25 E -F1 2.5(3.1.2.3. set)111 199.2 R F0(\(set x:type v)111 214.8 Q(alue\)) --.25 E(Creates/recreates the v)111 238.8 Q(ariable v)-.25 E -(alue of x to v)-.25 E(alue.)-.25 E F1 2.5(3.1.2.3.1. Err)111 262.8 R -(ors)-.18 E F0(Can syntax error)111 278.4 Q(.)-.55 E F1 2.5 -(3.1.2.4. if/elif/else)111 314.4 R F0(\(if condition function\))111 330 -Q(\(elif condition function\))111 354 Q(\(else function\))111 378 Q(Ex) -111 414 Q(ecutes the function pro)-.15 E -(vided if the condition is true.)-.15 E(Elif w)111 438 Q +/F0 10/Times-Roman@0 SF(-14-)297.67 48 Q(Creates/recreates the v)111 84 +Q(ariable v)-.25 E(alue of x to v)-.25 E(alue.)-.25 E/F1 10/Times-Bold@0 +SF 2.5(3.1.2.4. if/elif/else)111 120 R F0(\(if condition function\))111 +135.6 Q(\(elif condition function\))111 159.6 Q(\(else function\))111 +183.6 Q(Ex)111 219.6 Q(ecutes the function pro)-.15 E +(vided if the condition is true.)-.15 E(Elif w)111 243.6 Q (orks the same, e)-.1 E(xcept only if the pre)-.15 E -(vious if statement is f)-.25 E(alse.)-.1 E(Else e)111 462 Q -.15(xe) +(vious if statement is f)-.25 E(alse.)-.1 E(Else e)111 267.6 Q -.15(xe) -.15 G(cutes only if all pre).15 E(vious statements were f)-.25 E(alse.) --.1 E F1 2.5(3.1.2.4.1. Err)111 486 R(ors)-.18 E F0(Can syntax error)111 -501.6 Q(.)-.55 E F1 2.5(3.1.2.5. f)111 537.6 R(or)-.25 E F0 -(\(for i \(condition\) function\))111 553.2 Q +-.1 E F1 2.5(3.1.2.5. f)111 303.6 R(or)-.25 E F0 +(\(for i \(condition\) function\))111 319.2 Q (Runs the function while the condition is true, and increments i e)111 -577.2 Q -.15(ve)-.25 G(ry time the function is called.).15 E F1 2.5 -(3.1.2.5.1. Err)111 601.2 R(ors)-.18 E F0(Can syntax error)111 616.8 Q -(.)-.55 E F1 2.5(3.1.2.6. while)111 664.8 R F0 -(\(while condition function\))111 680.4 Q -(Runs the function if the condition is true, k)111 704.4 Q -(eeps running until it is f)-.1 E(alse.)-.1 E F1 2.5(3.1.2.6.1. Err)111 -728.4 R(ors)-.18 E 0 Cg EP +343.2 Q -.15(ve)-.25 G(ry time the function is called.).15 E F1 2.5 +(3.1.2.6. while)111 379.2 R F0(\(while condition function\))111 394.8 Q +(Runs the function if the condition is true, k)111 418.8 Q +(eeps running until it is f)-.1 E(alse.)-.1 E F1 2.5(3.1.2.7. symbol)111 +454.8 R F0 +(\(symbol a:type b:type c:type returntype name:char[] elf:char[]\))111 +470.4 Q .763(Returns a function that tak)111 494.4 R .763(es ar)-.1 F +.763(guments A, B, C \(of \214x)-.18 F .764 +(ed types\), the name of the function, and)-.15 F +(the \214le path of the elf.)111 506.4 Q F1(3.1.2.7.1.)111 530.4 Q 2.5 +(3.1.2.8. Arithmetic)111 566.4 R(operations)2.5 E F0(Simple operations) +111 582 Q(\(+ a b\) returns a + b)111 606 Q(\(- a b\) returns a - b)111 +630 Q(\(* a b\) returns a * b)111 654 Q(\(/ a b\) returns a / b)111 678 +Q F1 2.5(3.1.2.9. Comparison)111 714 R F0(All return true or f)111 729.6 +Q(alse)-.1 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-15-)297.67 48 Q(Can syntax error)111 84 Q(.) --.55 E/F1 10/Times-Bold@0 SF 2.5(3.1.2.7. symbol)111 120 R F0 -(\(symbol a:type b:type c:type returntype name:char[] elf:char[]\))111 -135.6 Q .764(Returns a function that tak)111 159.6 R .764(es ar)-.1 F -.764(guments A, B, C \(of \214x)-.18 F .763 -(ed types\), the name of the function, and)-.15 F -(the \214le path of the elf.)111 171.6 Q F1 2.5(3.1.2.7.1. Err)111 195.6 -R(ors)-.18 E F0(Can syntax error)111 211.2 Q(.)-.55 E(Can thro)111 235.2 -Q 2.5(wo)-.25 G(ther errors, via returning an err type.)-2.5 E F1 2.5 -(3.1.2.8. struct)111 271.2 R F0(\(struct)111 286.8 Q(_a:type)131 298.8 Q -(b:type)131 310.8 Q(c:type)131 322.8 Q(\))111 346.8 Q .557 -(Returns a struct \(a class\) that can ha)111 370.8 R .857 -.15(ve a d) --.2 H(ef).15 E .557(ault v)-.1 F .557(alue, the def)-.25 F .558(ault v) --.1 F .558(alue can be set using an un-)-.25 F .923 -(derscore in front of the v)111 382.8 R .923(ariable name. A def)-.25 F -.923(ault v)-.1 F .923(ariable will be returned if you use the struct) --.25 F(without specifying a v)111 394.8 Q(alue.)-.25 E -(Use let to assign it a name:)111 418.8 Q(\(let a:struct \(struct)111 -442.8 Q(...)131 454.8 Q(...)131 466.8 Q(...)131 478.8 Q(\))131 490.8 Q -(\))111 514.8 Q(Then to instantiate the struct use the follo)111 538.8 Q -(wing:)-.25 E(\(let a:obj struct\))111 562.8 Q(The struct ar)111 586.8 Q -(gument needs to ha)-.18 E .3 -.15(ve b)-.2 H(een set prior).15 E(.)-.55 -E 1.6 -.8(To r)111 610.8 T(ead from the struct use this:).8 E -(\(if \(= a.num b)111 634.8 Q(.num\) .... \))-.4 E(Or if you ha)111 -658.8 Q .3 -.15(ve s)-.2 H(et a def).15 E(ault v)-.1 E -(alue you can use the follo)-.25 E(wing:)-.25 E(\(if \(= a b)111 682.8 Q -(.num\) .... \))-.4 E F1 2.5(3.1.2.8.1. Err)111 706.8 R(ors)-.18 E F0 -(Can syntax error)111 722.4 Q(.)-.55 E 0 Cg EP +/F0 10/Times-Roman@0 SF(-15-)297.67 48 Q(\(= a b\) returns if a = b)111 +84 Q(\(!= a b\) returns if a != b)111 108 Q(\(> a b\) returns if a > b) +111 132 Q(\(< a b\) returns if a < b)111 156 Q +(\(=> a b\) returns if a => b)111 180 Q(\(=< a b\) returns if a =< b)111 +204 Q/F1 10/Times-Bold@0 SF 2.5(3.1.2.10. cast)111 240 R F0 +(\(cast a:generic type:char[]\))111 255.6 Q(returns a b)111 279.6 Q +(ut cast to data type type, which is a string.)-.2 E F1 2.5 +(3.1.2.11. typeof)111 315.6 R F0(\(typeof a:generic\))111 331.2 Q +(returns in a string the type that v)111 355.2 Q(ariable A is.)-.25 E F1 +2.5(3.1.2.12. terminate)111 391.2 R F0(\(terminate error:error\))111 +406.8 Q +(Kills the program at the current point, frees all related memory)111 +430.8 Q 2.5(,p)-.65 G(rints error info stored in error)-2.5 E(.)-.55 E +F1 2.5(3.1.2.13. r)111 466.8 R(etur)-.18 E(n)-.15 E F0 +(\(return a:type\))111 482.4 Q(Must be used in defun, returns "a" from \ +the function, "a" must be of the functions return type.)111 506.4 Q F1 +2.5(3.1.3. List)111 542.4 R(of k)2.5 E(eyw)-.1 E(ords)-.1 E F0(defun)111 +558 Q(for)111 582 Q(while)111 606 Q(if)111 630 Q(elif)111 654 Q(else)111 +678 Q(terminate)111 702 Q(return)111 726 Q 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-16-)297.67 48 Q/F1 10/Times-Bold@0 SF 2.5 -(3.1.2.9. Arithmetic)111 84 R(operations)2.5 E F0(Simple operations)111 -99.6 Q(\(+ a b\) returns a + b)111 123.6 Q(\(- a b\) returns a - b)111 -147.6 Q(\(* a b\) returns a * b)111 171.6 Q(\(/ a b\) returns a / b)111 -195.6 Q F1 2.5(3.1.2.10. Comparison)111 231.6 R F0(All return true or f) -111 247.2 Q(alse)-.1 E(\(= a b\) returns if a = b)111 271.2 Q -(\(!= a b\) returns if a != b)111 295.2 Q(\(> a b\) returns if a > b)111 -319.2 Q(\(< a b\) returns if a < b)111 343.2 Q -(\(=> a b\) returns if a => b)111 367.2 Q(\(=< a b\) returns if a =< b) -111 391.2 Q F1 2.5(3.1.2.10.1. Err)111 415.2 R(ors)-.18 E F0 -(Can syntax error)111 430.8 Q(.)-.55 E F1 2.5(3.1.2.11. cast)111 466.8 R -F0(\(cast a:generic type:char[]\))111 482.4 Q(returns a b)111 506.4 Q -(ut cast to data type type, which is a string.)-.2 E F1 2.5 -(3.1.2.11.1. Err)111 530.4 R(ors)-.18 E F0(Can syntax error)111 546 Q(.) --.55 E(Can thro)111 570 Q 2.5(we)-.25 G(rrors, via err)-2.5 E 2.5(,i)-.4 -G 2.5(fv)-2.5 G(alue can')-2.75 E 2.5(tb)-.18 G 2.5(ec)-2.5 G -(ast to a gi)-2.5 E -.15(ve)-.25 G 2.5(nt).15 G(ype.)-2.5 E F1 2.5 -(3.1.2.12. typeof)111 606 R F0(\(typeof a:generic\))111 621.6 Q -(returns in a string the type that v)111 645.6 Q(ariable A is.)-.25 E F1 -2.5(3.1.2.12.1. Err)111 669.6 R(ors)-.18 E F0(Can syntax error)111 685.2 -Q(.)-.55 E F1 2.5(3.1.2.13. terminate)111 721.2 R 0 Cg EP +/F0 10/Times-Roman@0 SF(-16-)297.67 48 Q(symbol)111 84 Q(set)111 108 Q +(let)111 132 Q/F1 10/Times-Bold@0 SF 2.5(3.2. Questionnair)111 180 R 2.5 +(e2f)-.18 G(or Rayn M)-2.75 E 2.5(3.2.1. Ho)111 204 R 2.5(wd)-.1 G 2.5 +(oy)-2.5 G(ou \214nd this lay)-2.75 E(out of the language?)-.25 E/F2 10 +/Times-Italic@0 SF .745(\(5-6 points\))111.08 219.6 R F0 3.245(-Il)3.305 +G(ik)-3.245 E 3.245(et)-.1 G .745 +(he immutable nature of the language - I lik)-3.245 F 3.245(et)-.1 G +.745(he simplicity - I lik)-3.245 F 3.245(et)-.1 G .745(he lo)-3.245 F +(w)-.25 E(le)111 231.6 Q -.15(ve)-.25 G 3.283(lp).15 G .783 +(erformance this will ha)-3.283 F 1.083 -.15(ve - I d)-.2 H(islik).15 E +3.283(et)-.1 G .783(he w)-3.283 F .783(ord terminate - I lik)-.1 F 3.283 +(et)-.1 G .784(he procedural approach,)-3.283 F(with the function rob) +111 243.6 Q(ustness - I dislik)-.2 E 2.5(et)-.1 G(he brack)-2.5 E(ets!) +-.1 E F1 2.5(3.2.2. Response)111 267.6 R F0 .104 +(Although he does dislik)111 283.2 R 2.603(es)-.1 G .103 +(ome of my features I belie)-2.603 F .403 -.15(ve t)-.25 H .103 +(hem to be core parts of the language so I).15 F .862(will k)111 295.2 R +.863(eep them. I will also k)-.1 F .863 +(eep his points in mind though, I don')-.1 F 3.363(tw)-.18 G .863 +(ant to discourage learning)-3.463 F +(the language due to its abstract syntax.)111 307.2 Q(Ho)111 331.2 Q(we) +-.25 E -.15(ve)-.25 G 2.5(ra).15 G 2.5(sp)-2.5 G +(er his request I will change the terminate k)-2.5 E -.15(ey)-.1 G -.1 +(wo).15 G(rd to the more normal e).1 E(xit.)-.15 E(An updated k)111 +355.2 Q -.15(ey)-.1 G -.1(wo).15 G(rd list is as \215o).1 E(ws:)-.25 E +(defun)111 379.2 Q(for)111 403.2 Q(while)111 427.2 Q(if)111 451.2 Q +(elif)111 475.2 Q(else)111 499.2 Q(terminate)111 523.2 Q(return)111 +547.2 Q(symbol)111 571.2 Q(set)111 595.2 Q(let)111 619.2 Q F1 2.5 +(3.3. What)111 655.2 R(language do y)2.5 E(ou use to mak)-.25 E 2.5(eap) +-.1 G -.18(ro)-2.5 G(gramming language).18 E F0 .34 +(As mentioned before Zipp)111 670.8 R 2.84(yw)-.1 G .34 +(ill be written in C, with some parts being written in Zipp)-2.84 F 2.84 +(yi)-.1 G 2.84(tself. I)-2.84 F(will try and k)111 682.8 Q +(eep most dependencies/libraries to a minimal to mak)-.1 E 2.5(et)-.1 G +(he project easier to manage.)-2.5 E F1 2.5(3.3.1. What)111 718.8 R +(is C?)2.5 E 0 Cg EP %%Page: 17 17 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-17-)297.67 48 Q(\(terminate error:error\))111 -84 Q(Kills the program at the current point, frees all related memory) -111 108 Q 2.5(,p)-.65 G(rints error info stored in error)-2.5 E(.)-.55 E -/F1 10/Times-Bold@0 SF 2.5(3.1.2.13.1. Err)111 132 R(ors)-.18 E F0 -(Can syntax error)111 147.6 Q(.)-.55 E F1 2.5(3.1.2.14. r)111 183.6 R -(etur)-.18 E(n)-.15 E F0(\(return a:type\))111 199.2 Q(Must be used in \ -defun, returns "a" from the function, "a" must be of the functions retu\ -rn type.)111 223.2 Q F1 2.5(3.1.2.14.1. Err)111 247.2 R(ors)-.18 E F0 -(Can syntax error)111 262.8 Q(.)-.55 E(Can thro)111 286.8 Q 2.5(we)-.25 -G(rrors via err)-2.5 E(.)-.55 E F1 2.5(3.2. Questionnair)111 310.8 R 2.5 -(e2f)-.18 G(or Rayn M)-2.75 E 2.5(3.3. What)111 346.8 R(language do y) -2.5 E(ou use to mak)-.25 E 2.5(eap)-.1 G -.18(ro)-2.5 G -(gramming language).18 E F0 .34(As mentioned before Zipp)111 362.4 R -2.84(yw)-.1 G .34 -(ill be written in C, with some parts being written in Zipp)-2.84 F 2.84 -(yi)-.1 G 2.84(tself. I)-2.84 F(will try and k)111 374.4 Q -(eep most dependencies/libraries to a minimal to mak)-.1 E 2.5(et)-.1 G -(he project easier to manage.)-2.5 E F1 2.5(3.3.1. What)111 410.4 R -(is C?)2.5 E F0 3.027(Cw)111 426 S .527 -(as made by Dennis Ritchie, in 1972 at A)-3.127 F(T&T')-1.11 E 3.026(sb) --.55 G .526(ell labs. It w)-3.026 F .526(as designed to mak)-.1 F 3.026 -(ep)-.1 G(rogram-)-3.026 E .067(ming lo)111 438 R 2.567(wl)-.25 G -2.15 --.25(ev e)-2.567 H 2.567(ls).25 G .067(ystems f)-2.567 F .067 -(ar easier than it had been before. It w)-.1 F .068 -(as used to create the unix operating)-.1 F .65(system which w)111 450 R +/F0 10/Times-Roman@0 SF(-17-)297.67 48 Q 3.026(Cw)111 84 S .526 +(as made by Dennis Ritchie, in 1972 at A)-3.126 F(T&T')-1.11 E 3.027(sb) +-.55 G .527(ell labs. It w)-3.027 F .527(as designed to mak)-.1 F 3.027 +(ep)-.1 G(rogram-)-3.027 E .068(ming lo)111 96 R 2.568(wl)-.25 G -2.15 +-.25(ev e)-2.568 H 2.568(ls).25 G .068(ystems f)-2.568 F .067 +(ar easier than it had been before. It w)-.1 F .067 +(as used to create the unix operating)-.1 F .65(system which w)111 108 R .65(ould go on to inspire most modern operating systems in some w)-.1 F (ay)-.1 E 3.15(.\()-.65 G .65(macos still)-3.15 F -(has code from the original release of C+unix\).)111 462 Q .377 +(has code from the original release of C+unix\).)111 120 Q .377 (The language quickly caught on outside of bell labs after more a)111 -486 R -.25(va)-.2 G .378(ilable releases of unix arri).25 F -.15(ve)-.25 -G(d).15 E .102(such as bsd 4.4, sun os and GNU. It w)111 498 R .102 +144 R -.25(va)-.2 G .377(ilable releases of unix arri).25 F -.15(ve)-.25 +G(d).15 E .102(such as bsd 4.4, sun os and GNU. It w)111 156 R .102 (as found to be able to do all the things that you could do in)-.1 F -(ASM ho)111 510 Q(we)-.25 E -.15(ve)-.25 G 2.5(rw).15 G(ith f)-2.5 E -(ar less a headache.)-.1 E F1 2.5(3.3.2. Wh)111 546 R 2.5(yi)-.15 G 2.5 -(sC)-2.5 G(?)-2.5 E F0 .469(As mentioned C can do an)111 561.6 R .469 -(ything that ASM can do, meaning it is lightning f)-.15 F .469 -(ast and can tak)-.1 F 2.969(ea)-.1 G(d-)-2.969 E -.25(va)111 573.6 S -.345(ntage of direct memory access. This allo).25 F .345(ws you to mak) --.25 F 2.845(ev)-.1 G .345(ery f)-2.995 F .345(ast lightweight e)-.1 F --.15(xe)-.15 G .345(cutables that).15 F .239(can ri)111 585.6 R -.25(va) --.25 G 2.739(lt).25 G .239(he performance of handwritten ASM \(often be\ -ating it if you enable compiler optimisa-)-2.739 F .159 -(tions\). It is this that mak)111 597.6 R .159 -(es C the perfect language for an)-.1 F 2.659(ya)-.15 G .158 -(nd all programming languages, where)-2.659 F(speed is k)111 609.6 Q +(ASM ho)111 168 Q(we)-.25 E -.15(ve)-.25 G 2.5(rw).15 G(ith f)-2.5 E +(ar less a headache.)-.1 E/F1 10/Times-Bold@0 SF 2.5(3.3.2. Wh)111 204 R +2.5(yi)-.15 G 2.5(sC)-2.5 G(?)-2.5 E F0 .469(As mentioned C can do an) +111 219.6 R .469(ything that ASM can do, meaning it is lightning f)-.15 +F .469(ast and can tak)-.1 F 2.968(ea)-.1 G(d-)-2.968 E -.25(va)111 +231.6 S .345(ntage of direct memory access. This allo).25 F .345 +(ws you to mak)-.25 F 2.845(ev)-.1 G .345(ery f)-2.995 F .345 +(ast lightweight e)-.1 F -.15(xe)-.15 G .345(cutables that).15 F .24 +(can ri)111 243.6 R -.25(va)-.25 G 2.74(lt).25 G .239(he performance of\ + handwritten ASM \(often beating it if you enable compiler optimisa-) +-2.74 F .158(tions\). It is this that mak)111 255.6 R .159 +(es C the perfect language for an)-.1 F 2.659(ya)-.15 G .159 +(nd all programming languages, where)-2.659 F(speed is k)111 267.6 Q -.15(ey)-.1 G 2.5(,a)-.5 G(nd allfeatures need to be a)-2.5 E -.25(va) --.2 G(ilable are present.).25 E F1 2.5(3.3.3. Ho)111 645.6 R 2.5(wi)-.1 -G 2.5(sC)-2.5 G(?)-2.5 E F0 3.214(Ci)111 661.2 S 3.214(sc)-3.214 G .714 -(ompiled to ASM, the main compilers a)-3.214 F -.25(va)-.2 G .715 +-.2 G(ilable are present.).25 E F1 2.5(3.3.3. Ho)111 303.6 R 2.5(wi)-.1 +G 2.5(sC)-2.5 G(?)-2.5 E F0 3.215(Ci)111 319.2 S 3.215(sc)-3.215 G .715 +(ompiled to ASM, the main compilers a)-3.215 F -.25(va)-.2 G .714 (ilable are clang, gcc and MSVC, I will be using).25 F -(gcc as it is generally standard in linux en)111 673.2 Q(vironments.)-.4 -E(Man)111 697.2 Q 2.709(yb)-.15 G .209(uild systems are a)-2.909 F -.25 +(gcc as it is generally standard in linux en)111 331.2 Q(vironments.)-.4 +E(Man)111 355.2 Q 2.708(yb)-.15 G .208(uild systems are a)-2.908 F -.25 (va)-.2 G .209(ilable for C, the main ones being cmak).25 F 2.709(ea)-.1 -G .209(nd gnu mak)-2.709 F .208(e. Both of them)-.1 F(ha)111 709.2 Q -.851 -.15(ve t)-.2 H .551 +G .209(nd gnu mak)-2.709 F .209(e. Both of them)-.1 F(ha)111 367.2 Q +.852 -.15(ve t)-.2 H .551 (he goal of putting the compiling process in one command. Cmak).15 F -3.052(ei)-.1 G 3.052(sc)-3.052 G .552(ross platform \(sorta)-3.052 F -(windo)111 721.2 Q(ws doesn')-.25 E 2.5(tw)-.18 G(ork well b)-2.6 E -(ut it does w)-.2 E(ork\).)-.1 E 0 Cg EP +3.051(ei)-.1 G 3.051(sc)-3.051 G .551(ross platform \(sorta)-3.051 F +(windo)111 379.2 Q(ws doesn')-.25 E 2.5(tw)-.18 G(ork well b)-2.6 E +(ut it does w)-.2 E(ork\).)-.1 E F1 2.5(3.3.4. Libraries)111 427.2 R F0 +(The libraries I will use are the follo)111 442.8 Q(wing:)-.25 E 2.5(Cs) +111 466.8 S(tdlib)-2.5 E 2.5(Cu)111 490.8 S(nistd)-2.5 E 2.5(Ce)111 +514.8 S(rrno)-2.5 E(Unix de)111 538.8 Q(vice \214les)-.25 E(Zipp)111 +562.8 Q 2.5(ys)-.1 G(trings)-2.5 E(Zipp)111 586.8 Q 2.5(yg)-.1 G(raphs) +-2.5 E(Zipp)111 610.8 Q 2.5(ys)-.1 G(orts)-2.5 E +(Addition libraries \(may not be implemented\):)111 634.8 Q(Raylib)111 +658.8 Q 2.5(Cs)111 682.8 S(ock)-2.5 E(ets + Zipp)-.1 E 2.5(ys)-.1 G(ock) +-2.5 E(ets)-.1 E F1 2.5(3.3.5. Modularization)111 718.8 R 0 Cg EP %%Page: 18 18 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-18-)297.67 48 Q/F1 10/Times-Bold@0 SF 2.5 -(3.3.4. Libraries)111 84 R F0(The libraries I will use are the follo)111 -99.6 Q(wing:)-.25 E 2.5(Cs)111 123.6 S(tdlib)-2.5 E 2.5(Cu)111 147.6 S -(nistd)-2.5 E 2.5(Ce)111 171.6 S(rrno)-2.5 E(Unix de)111 195.6 Q -(vice \214les)-.25 E(Zipp)111 219.6 Q 2.5(ys)-.1 G(trings)-2.5 E(Zipp) -111 243.6 Q 2.5(yg)-.1 G(raphs)-2.5 E(Zipp)111 267.6 Q 2.5(ys)-.1 G -(orts)-2.5 E(Addition libraries \(may not be implemented\):)111 291.6 Q -(Raylib)111 315.6 Q 2.5(Cs)111 339.6 S(ock)-2.5 E(ets + Zipp)-.1 E 2.5 -(ys)-.1 G(ock)-2.5 E(ets)-.1 E F1 2.5(3.3.5. Modularization)111 375.6 R -F0 2.062 -.8(To m)111 391.2 T(ak).8 E 2.962(et)-.1 G .462 -(he project more manageable I will split it into man)-2.962 F 2.961 -(yC\214)-.15 G .461(les, this is to k)-2.961 F .461(eep it from be-)-.1 -F(coming impossible to edit code.)111 403.2 Q -(The \214le layout looks as follo)111 427.2 Q(ws:)-.25 E(Mak)121 451.2 Q -(e\214le)-.1 E(ads)121 463.2 Q(Mak)131 475.2 Q(e\214le)-.1 E(ast)131 -487.2 Q(Mak)141 499.2 Q(e\214le)-.1 E(ast.c)141 511.2 Q(ast.h)141 523.2 -Q(types.c)141 535.2 Q(types.h)141 547.2 Q(dict)131 559.2 Q(Mak)143.5 -571.2 Q(e\214le)-.1 E(dict.c)143.5 583.2 Q(dict.h)143.5 595.2 Q -(dicttest.c)143.5 607.2 Q(ll)131 619.2 Q(Mak)143.5 631.2 Q(e\214le)-.1 E -(ll.c)143.5 643.2 Q(ll.h)143.5 655.2 Q(lltest.c)143.5 667.2 Q -.15(exe) -121 679.2 S(cution).15 E(Mak)131 691.2 Q(e\214le)-.1 E -.15(exe)131 -703.2 S(c.c).15 E -.15(exe)131 715.2 S(c.h).15 E(types.c)131 727.2 Q 0 -Cg EP -%%Page: 19 19 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-19-)297.67 48 Q(types.h)131 84 Q(libs)121 96 Q -(Mak)131 108 Q(e\214le)-.1 E(graphs)131 120 Q(graphs.zp)141 132 Q(y)-.1 -E(io)131 144 Q(io.zp)141 156 Q(y)-.1 E(stdlib)131 168 Q(Mak)141 180 Q -(e\214le)-.1 E(stdlib)141 192 Q(.c)-.4 E(stdlib)141 204 Q(.zp)-.4 E(y) --.1 E(string)131 216 Q(string.zp)141 228 Q(y)-.1 E(proto)131 240 Q(ast) -141 252 Q(Mak)151 264 Q(e\214le)-.1 E(ast.c)151 276 Q(astg.c)151 288 Q -(astg.h)151 300 Q(tok)121 312 Q(enizer)-.1 E(Mak)131 324 Q(e\214le)-.1 E -(parser)131 336 Q(.c)-.55 E(parser)131 348 Q(.h)-.55 E(tok)131 360 Q -(enizer)-.1 E(.c)-.55 E(tok)131 372 Q(enizer)-.1 E(.h)-.55 E(types.c)131 -384 Q(types.h)131 396 Q(zp)121 408 Q(y)-.1 E(Mak)131 420 Q(e\214le)-.1 E -(zp)131 432 Q -.65(y.)-.1 G(c).65 E(zp)131 444 Q(ycheck.c)-.1 E(zp)121 -456 Q(ycheck)-.1 E(Mak)131 468 Q(e\214le)-.1 E(errors.c)131 480 Q -(errors.h)131 492 Q(zp)131 504 Q(ycheck.c)-.1 E(zp)131 516 Q(ycheck.h) --.1 E(zp)121 528 Q(ypkg)-.1 E(deps.zp)131 540 Q(y)-.1 E(do)131 552 Q -(wnload.zp)-.25 E(y)-.1 E(zp)131 564 Q(ypkg.zp)-.1 E(y)-.1 E .712 -(As you can see this is split up o)111 588 R -.15(ve)-.15 G 3.212(ra).15 -G .713(round 40 \214les and 16 folders, each \214le should not go o) --3.212 F -.15(ve)-.15 G(r).15 E(~500 lines of code. This is to k)111 600 -Q(eep e)-.1 E -.15(ve)-.25 G(rything as easy to manage as possible.).15 -E .562(This le)111 624 R -.15(ve)-.25 G 3.062(lo).15 G 3.062(fm)-3.062 G -.562(odularization in needed for the de)-3.062 F -.15(ve)-.25 G .562 +/F0 10/Times-Roman@0 SF(-18-)297.67 48 Q 2.061 -.8(To m)111 84 T(ak).8 E +2.961(et)-.1 G .461(he project more manageable I will split it into man) +-2.961 F 2.962(yC\214)-.15 G .462(les, this is to k)-2.962 F .462 +(eep it from be-)-.1 F(coming impossible to edit code.)111 96 Q +(The \214le layout looks as follo)111 120 Q(ws:)-.25 E(PLA)111 144 Q +(CE HERE)-.4 E .713(As you can see this is split up o)111 168 R -.15(ve) +-.15 G 3.213(ra).15 G .712 +(round 40 \214les and 16 folders, each \214le should not go o)-3.213 F +-.15(ve)-.15 G(r).15 E(~500 lines of code. This is to k)111 180 Q(eep e) +-.1 E -.15(ve)-.25 G(rything as easy to manage as possible.).15 E .561 +(This le)111 204 R -.15(ve)-.25 G 3.061(lo).15 G 3.062(fm)-3.061 G .562 +(odularization in needed for the de)-3.062 F -.15(ve)-.25 G .562 (lopment of Zipp).15 F 3.062(ya)-.1 G 3.062(sw)-3.062 G .562 -(ithout it, \214les will be-)-3.062 F(come a mess that can')111 636 Q -2.5(tb)-.18 G 2.5(ew)-2.5 G(ork)-2.6 E(ed with.)-.1 E .041(All .c \214l\ +(ithout it, \214les will be-)-3.062 F(come a mess that can')111 216 Q +2.5(tb)-.18 G 2.5(ew)-2.5 G(ork)-2.6 E(ed with.)-.1 E .042(All .c \214l\ es will be compiled into .o \214les, then the .o \214les can be link)111 -660 R .042(ed with the \214nal zp)-.1 F -.65(y.)-.1 G 2.542(ct).65 G -2.542(og)-2.542 G(en-)-2.542 E(erate the \214nal e)111 672 Q -.15(xe) --.15 G(cutable.).15 E/F1 10/Times-Bold@0 SF 2.5(3.3.5.1. Build)111 720 R -(system)2.5 E 0 Cg EP -%%Page: 20 20 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-20-)297.67 48 Q 1.221 -(The entire project is being b)111 84 R 1.221(uild with GNU mak)-.2 F -3.721<658c>-.1 G 1.22(les, each folder that b)-3.721 F 1.22 -(uilds something will)-.2 F(ha)111 96 Q 1.003 -.15(ve i)-.2 H .703(ts o) -.15 F .703(wn mak)-.25 F .704(e\214le. This will mean the entire projec\ -t can be compiled with a single mak)-.1 F 3.204(ei)-.1 G(n)-3.204 E -(the root folder of the project.)111 108 Q(Example of mak)111 132 Q(e:) --.1 E(mak)111 156 Q 2.5(e-)-.1 G(j2)-2.5 E(This will b)111 180 Q -(uild all \214les speci\214ed by 'Mak)-.2 E(e\214le' with 2 threads.)-.1 -E .34(The project should be b)111 204 R .34 -(uild with gcc, and ld. It should be b)-.2 F .34(uild with the -O3 b)-.2 -F .34(uild \215ag to ensure)-.2 F(the program runs as f)111 216 Q +240 R .041(ed with the \214nal zp)-.1 F -.65(y.)-.1 G 2.541(ct).65 G +2.541(og)-2.541 G(en-)-2.541 E(erate the \214nal e)111 252 Q -.15(xe) +-.15 G(cutable.).15 E/F1 10/Times-Bold@0 SF 2.5(3.3.5.1. Build)111 300 R +(system)2.5 E F0 1.22(The entire project is being b)111 315.6 R 1.221 +(uild with GNU mak)-.2 F 3.721<658c>-.1 G 1.221(les, each folder that b) +-3.721 F 1.221(uilds something will)-.2 F(ha)111 327.6 Q 1.004 -.15 +(ve i)-.2 H .704(ts o).15 F .704(wn mak)-.25 F .703(e\214le. This will \ +mean the entire project can be compiled with a single mak)-.1 F 3.203 +(ei)-.1 G(n)-3.203 E(the root folder of the project.)111 339.6 Q +(Example of mak)111 363.6 Q(e:)-.1 E(mak)111 387.6 Q 2.5(e-)-.1 G(j2) +-2.5 E(This will b)111 411.6 Q(uild all \214les speci\214ed by 'Mak)-.2 +E(e\214le' with 2 threads.)-.1 E .34(The project should be b)111 435.6 R +.34(uild with gcc, and ld. It should be b)-.2 F .34(uild with the -O3 b) +-.2 F .34(uild \215ag to ensure)-.2 F(the program runs as f)111 447.6 Q (ast as possible. -O3 forces the compiler to b)-.1 E (uild with optimizations.)-.2 E(When the project is \214nished, I will \ -try compiling with clang and tcc, to compare performance.)111 240 Q/F1 -10/Times-Bold@0 SF 2.5(3.4. T)111 276 R(ime table)-.18 E F0 .174 -(The \214rst step is to tackle the interpreter)111 291.6 R 2.674(,s)-.4 +try compiling with clang and tcc, to compare performance.)111 471.6 Q F1 +2.5(3.4. T)111 507.6 R(ime table)-.18 E F0 .174 +(The \214rst step is to tackle the interpreter)111 523.2 R 2.674(,s)-.4 G 2.674(ot)-2.674 G .174(he zp)-2.674 F -.65(y.)-.1 G 2.674<638c>.65 G -.174(le needs to be \214nished. The tok)-2.674 F(enizer)-.1 E 2.674(,e) --.4 G -.15(xe)-2.824 G(-).15 E .598(cution, and libs folders need to be\ - \214nished, after this point you should be able to e)111 303.6 R -.15 -(xe)-.15 G .597(cute Zipp).15 F(y)-.1 E(code ho)111 315.6 Q(we)-.25 E +.174(le needs to be \214nished. The tok)-2.674 F(enizer)-.1 E 2.673(,e) +-.4 G -.15(xe)-2.823 G(-).15 E .598(cution, and libs folders need to be\ + \214nished, after this point you should be able to e)111 535.2 R -.15 +(xe)-.15 G .598(cute Zipp).15 F(y)-.1 E(code ho)111 547.2 Q(we)-.25 E -.15(ve)-.25 G 2.5(rn).15 G(ot syntax check it or get error handling.) --2.5 E .124(The ne)111 339.6 R .124(xt step is zp)-.15 F .125 -(ycheck, the syntax and error handler)-.1 F 2.625(,t)-.4 G .125 -(his should be ran before code is shipped)-2.625 F(to the user)111 351.6 +-2.5 E .125(The ne)111 571.2 R .125(xt step is zp)-.15 F .125 +(ycheck, the syntax and error handler)-.1 F 2.625(,t)-.4 G .124 +(his should be ran before code is shipped)-2.625 F(to the user)111 583.2 Q 2.5(.I)-.55 G 2.5(tc)-2.5 G(an reuse a lot of code from the tok)-2.5 E (enizer and e)-.1 E -.15(xe)-.15 G(cution steps.).15 E .716 -(Finally I need to mak)111 375.6 R 3.216(ez)-.1 G -.1(py)-3.216 G .716 +(Finally I need to mak)111 607.2 R 3.216(ez)-.1 G -.1(py)-3.216 G .716 (pkg, this should be easy as most of it can be written in Zipp).1 F -2.016 -.65(y, a)-.1 H .716(nd a).65 F(fe)111 387.6 Q 2.5(wb)-.25 G +2.016 -.65(y, a)-.1 H .716(nd a).65 F(fe)111 619.2 Q 2.5(wb)-.25 G (its can be written in bash. It should be a good test to ho)-2.5 E 2.5 (wZ)-.25 G(ipp)-2.5 E 2.5(yc)-.1 G(an be written.)-2.5 E(If time allo) -111 411.6 Q(ws it is at this point that I will write a Raylib library a\ -nd a unix/C sock)-.25 E(ets library)-.1 E(.)-.65 E F1 2.5(4. T)111 447.6 -R(echnical Solution)-.92 E 2.5(5. T)111 471.6 R(esting)-.92 E 2.5(6. Ev) -111 495.6 R(aluation)-.1 E 0 Cg EP +111 643.2 Q(ws it is at this point that I will write a Raylib library a\ +nd a unix/C sock)-.25 E(ets library)-.1 E(.)-.65 E F1 2.5(4. T)111 679.2 +R(echnical Solution)-.92 E 2.5(5. T)111 703.2 R(esting)-.92 E 2.5(6. Ev) +111 727.2 R(aluation)-.1 E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-19-)297.67 48 Q 0 Cg EP %%Trailer end %%EOF diff --git a/comp/lucas-standen-NEA/writeup/questions-for-amy.ps b/comp/lucas-standen-NEA/writeup/questions-for-amy.ps index 4898b7c..a026158 100644 --- a/comp/lucas-standen-NEA/writeup/questions-for-amy.ps +++ b/comp/lucas-standen-NEA/writeup/questions-for-amy.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.23.0 -%%CreationDate: Tue May 21 15:38:15 2024 +%%CreationDate: Tue Jun 4 13:46:08 2024 %%DocumentNeededResources: font Times-Bold %%+ font Times-Roman %%DocumentSuppliedResources: procset grops 1.23 0 diff --git a/comp/lucas-standen-NEA/writeup/questions-for-rayn.ms b/comp/lucas-standen-NEA/writeup/questions-for-rayn.ms deleted file mode 100644 index fc263c6..0000000 --- a/comp/lucas-standen-NEA/writeup/questions-for-rayn.ms +++ /dev/null @@ -1,15 +0,0 @@ -.NH 1 -What do you think about the language definition? -.LP -.B1 -<ANS 1> -.B2 -.NH 1 -Is there anything that you didn't understand? -.LP -<ANS 2> -.NH 1 -Is there anything you would add/change? -.LP -<ANS 3> - diff --git a/comp/lucas-standen-NEA/writeup/questions-for-rayn.ps b/comp/lucas-standen-NEA/writeup/questions-for-rayn.ps deleted file mode 100644 index d2afbb8..0000000 --- a/comp/lucas-standen-NEA/writeup/questions-for-rayn.ps +++ /dev/null @@ -1,276 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.23.0 -%%CreationDate: Tue May 21 15:38:16 2024 -%%DocumentNeededResources: font Times-Bold -%%+ font Times-Roman -%%DocumentSuppliedResources: procset grops 1.23 0 -%%Pages: 1 -%%PageOrder: Ascend -%%DocumentMedia: Default 612 792 0 () () -%%Orientation: Portrait -%%EndComments -%%BeginDefaults -%%PageMedia: Default -%%EndDefaults -%%BeginProlog -%%BeginResource: procset grops 1.23 0 -%!PS-Adobe-3.0 Resource-ProcSet -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -% The ASCII code of the space character. -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -% name size font SF - -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -% name a c d font MF - -/MF{ -findfont -[5 2 roll -0 3 1 roll % b -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -% Enable manual feed. -% MANUAL - -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -% Guess the page length. -% This assumes that the imageable area is vertically centered on the page. -% PLG - length -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -% BP - -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -DEFS/BPhook known{DEFS begin BPhook end}if -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}def -% centerx centery radius startangle endangle DA - -/DA{ -newpath arcn stroke -}bind def -% x y SN - x' y' -% round a position to nearest (pixel + (.25,.25)) -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -% endx endy startx starty DL - -% we round the endpoints of the line, so that parallel horizontal -% and vertical lines will appear even -/DL{ -SN -moveto -SN -lineto stroke -}bind def -% centerx centery radius DC - -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -% width height centerx centery DE - -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -% these are for splines -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -% fill the last path -% r g b Fr - -/Fr{ -setrgbcolor fill -}bind def -% c m y k Fk - -/setcmykcolor where{ -pop -/Fk{ -setcmykcolor fill -}bind def -}if -% g Fg - -/Fg{ -setgray fill -}bind def -% fill with the "current color" -/FL/fill load def -/LW/setlinewidth load def -/Cr/setrgbcolor load def -/setcmykcolor where{ -pop -/Ck/setcmykcolor load def -}if -/Cg/setgray load def -% new_font_name encoding_vector old_font_name RE - -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne -2 index/UniqueID ne -and -{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -% hpos vpos EBEGIN - -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -% llx lly newwid wid newht ht newllx newlly PBEGIN - -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -% set the graphics state to default values -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -% -% Any included setpagedevice should be ignored. -% See: http://www.w-beer.de/doc/ps/. -% -/setpagedevice{}def -mark -}bind def -/PEND{ -cleartomark -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%EndProlog -%%BeginSetup -%%BeginFeature: *PageSize Default -<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice -%%EndFeature -%%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Roman -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Times-Roman@0 ENC0/Times-Roman RE/Times-Bold@0 ENC0/Times-Bold RE -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 2.5(1. What)72 84 R(do y)2.5 E -(ou think about the language de\214nition?)-.25 E/F1 10/Times-Roman@0 SF -(<ANS 1>)77 99.6 Q .4 LW 540 102.1 72 102.1 DL 540 90.1 540 102.1 DL 72 -90.1 540 90.1 DL 72 102.1 72 90.1 DL F0 2.5(2. Is)72 123.6 R(ther)2.5 E -2.5(ea)-.18 G(nything that y)-2.5 E(ou didn't understand?)-.25 E F1 -(<ANS 2>)72 139.2 Q F0 2.5(3. Is)72 163.2 R(ther)2.5 E 2.5(ea)-.18 G -(nything y)-2.5 E(ou w)-.25 E(ould add/change?)-.1 E F1(<ANS 3>)72 178.8 -Q 0 Cg EP -%%Trailer -end -%%EOF |