summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2024-07-04 13:11:04 +0100
committerthing1 <thing1@seacrossedlovers.xyz>2024-07-04 13:11:04 +0100
commit3dad2f4c5ce7fd44015cbd921318b3512c36326e (patch)
treee43f3b1d0080e9de96c2866743e521ecbd2770f5
parent478eed4ef9ece1b86b2fed7bfe57d62180b12c92 (diff)
zippy supports arrays!
-rw-r--r--.vs/slnx.sqlitebin114688 -> 0 bytes
-rw-r--r--comp/lucas-standen-NEA/code/TODO4
-rw-r--r--comp/lucas-standen-NEA/code/execution/builtin.c33
-rwxr-xr-xcomp/lucas-standen-NEA/code/execution/execbin33904 -> 39376 bytes
-rw-r--r--comp/lucas-standen-NEA/code/execution/exec.c8
-rw-r--r--comp/lucas-standen-NEA/code/global/types.h13
-rw-r--r--comp/lucas-standen-NEA/code/global/util.c111
-rw-r--r--comp/lucas-standen-NEA/code/global/util.h8
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/Makefile4
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/parser.c19
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/parser.h2
-rwxr-xr-xcomp/lucas-standen-NEA/code/tokenizer/testbin0 -> 28320 bytes
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/test.c6
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/tokenizer.c12
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/tokenizer.h2
-rw-r--r--comp/lucas-standen-NEA/writeup/coverpage.ms693
-rw-r--r--comp/lucas-standen-NEA/writeup/coverpage.ps1192
-rwxr-xr-xcomp/lucas-standen-NEA/writeup/make.sh2
-rw-r--r--comp/lucas-standen-NEA/writeup/questions-for-amy.ps2
19 files changed, 1185 insertions, 926 deletions
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
deleted file mode 100644
index eed7154..0000000
--- a/.vs/slnx.sqlite
+++ /dev/null
Binary files differ
diff --git a/comp/lucas-standen-NEA/code/TODO b/comp/lucas-standen-NEA/code/TODO
index d15d029..25766b5 100644
--- a/comp/lucas-standen-NEA/code/TODO
+++ b/comp/lucas-standen-NEA/code/TODO
@@ -1 +1,3 @@
-FIX THE SEGFAULT ON ADDING / SUBTRACTING
+finish the pre processor, it should read through a given input and convert all string litterals to arrays
+
+make it possible to index arrays
diff --git a/comp/lucas-standen-NEA/code/execution/builtin.c b/comp/lucas-standen-NEA/code/execution/builtin.c
index 99aca8c..12441cd 100644
--- a/comp/lucas-standen-NEA/code/execution/builtin.c
+++ b/comp/lucas-standen-NEA/code/execution/builtin.c
@@ -13,32 +13,37 @@ void *doCall(ast_node *node){
}
}
- I64 *outi64 = CheckedMalloc(sizeof(I64));
+ literal *out = CheckedMalloc(sizeof(literal));
switch (id){
case ADD:
- outi64->data = node->literalArgs[0]->i64->data + node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data + node->literalArgs[1]->i64->data;
+ return out;
break;
- case SUB:
- outi64->data = node->literalArgs[0]->i64->data - node->literalArgs[1]->i64->data;
- return outi64;
+
+ case SUB:
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data - node->literalArgs[1]->i64->data;
+ return out;
break;
case DIV:
- outi64->data = node->literalArgs[0]->i64->data / node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data / node->literalArgs[1]->i64->data;
+ return out;
break;
case MUL:
- outi64->data = node->literalArgs[0]->i64->data * node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data * node->literalArgs[1]->i64->data;
+ return out;
break;
case WRITE:
- fputs(node->literalArgs[0], stdout);
+ for (int i = 0; i < node->literalArgs[0]->arr->len; i++)
+ fputc(node->literalArgs[0]->arr->arr[i].ch->data, stdout);
break;
-
+
case EXIT:
- int returnValue = node->literalArgs[0]->i64->data;
- CheckedFreeALL();
+ int returnValue = (int)node->literalArgs[0]->i64->data;
exit(returnValue);
break;
}
diff --git a/comp/lucas-standen-NEA/code/execution/exec b/comp/lucas-standen-NEA/code/execution/exec
index e1cfbf1..744535a 100755
--- a/comp/lucas-standen-NEA/code/execution/exec
+++ b/comp/lucas-standen-NEA/code/execution/exec
Binary files differ
diff --git a/comp/lucas-standen-NEA/code/execution/exec.c b/comp/lucas-standen-NEA/code/execution/exec.c
index adb6f25..8775526 100644
--- a/comp/lucas-standen-NEA/code/execution/exec.c
+++ b/comp/lucas-standen-NEA/code/execution/exec.c
@@ -2,17 +2,15 @@
#include <stdlib.h>
#include "./builtin.h"
-
#include "../global/util.h"
-
#include "../tokenizer/tokenizer.h"
int main(){
- char *sample = "(exit (+ 1 1))";
+ char *sample = "(write ['h','e','l','l','o','\n'])";
ast_node *root = tokenize(sample);
doCall(root);
- CheckedFreeALL();
-
+ free(root);
+
return 0;
}
diff --git a/comp/lucas-standen-NEA/code/global/types.h b/comp/lucas-standen-NEA/code/global/types.h
index 0d27996..2c3c4be 100644
--- a/comp/lucas-standen-NEA/code/global/types.h
+++ b/comp/lucas-standen-NEA/code/global/types.h
@@ -26,14 +26,21 @@ typedef struct Float {
float data;
} Float;
-typedef union litteral {
+typedef struct Arr {
+ union literal *arr;
+ long len;
+} Arr;
+
+typedef union literal {
I32 *i32;
I64 *i64;
U32 *u32;
I64 *u64;
Char *ch;
Float *fl;
-} litteral;
+
+ Arr *arr;
+} literal;
// built in functions
typedef enum builtInFuncs {
@@ -82,7 +89,7 @@ typedef struct ast_node ast_node;
typedef struct ast_node {
functionToken *func; // if it's not builtin then use this
- litteral **literalArgs; // the args of the node, this will be an array of litteral values
+ literal **literalArgs; // the args of the node, this will be an array of literal values
ast_node **args; // the non litteral tokens
// if litteralArgs[x] is real then args[x] should be NULL, and vice versa
} ast_node;
diff --git a/comp/lucas-standen-NEA/code/global/util.c b/comp/lucas-standen-NEA/code/global/util.c
index 3b1f97c..d1f2b84 100644
--- a/comp/lucas-standen-NEA/code/global/util.c
+++ b/comp/lucas-standen-NEA/code/global/util.c
@@ -11,15 +11,10 @@
// functions for user
void Die(); // brings down the program
-void *CheckedMalloc(long size); // malloc checked with autofree
+void *CheckedMalloc(long size); // CheckedMalloc checked with autofree
void *CheckedRealloc(void *out, long size); // realloc checked with autofree
-int CheckedFree(void *ptr); // frees a pointer if it is in the array MEMptrs
-void CheckedFreeALL(); // frees all pointers in the array MEMptrs
+literal *giveType(char *tok);
-#define MAXPTRS 30000 // maximum allocs done by user
-
-void *MEMptrs[MAXPTRS] = { NULL };
-size_t currentPtr = 0;
void Die(){
perror("zpy parser");
@@ -30,12 +25,6 @@ void *CheckedMalloc(long size){
void *out = malloc(size);
if (out == NULL)
Die();
- MEMptrs[currentPtr] = out;
- currentPtr++;
- if (currentPtr > MAXPTRS){
- printf("used %d ptrs!\n", MAXPTRS);
- Die();
- }
return out;
}
@@ -43,39 +32,9 @@ void *CheckedRealloc(void *orig, long size){
void *out = realloc(orig, size);
if (out == NULL)
Die();
- MEMptrs[currentPtr] = out;
- currentPtr++;
- if (currentPtr > MAXPTRS){
- printf("used %d ptrs!\n", MAXPTRS);
- Die();
- }
-
- for (int i = 0; i < MAXPTRS; i++)
- if (MEMptrs[i] == orig && MEMptrs[i] != NULL) MEMptrs[i] = NULL;
-
return out;
}
-int CheckedFree(void *ptr){
- if (ptr == NULL) return 1;
- for (int i = 0; i < MAXPTRS; i++){
- if (MEMptrs[i] == ptr){
- free(MEMptrs[i]);
- MEMptrs[i] = NULL;
- return 0;
- }
- }
- return 1;
-}
-
-void CheckedFreeALL(){
- for (int i = 0; i < MAXPTRS; i++){
- if (MEMptrs[i] != NULL){
- free(MEMptrs[i]);
- }
- }
-}
-
I64 *isNum(char *str){
for (int i = 0; i < strlen(str); i++){
if (isdigit(str[i]) == 0 && str[i] != '-'){
@@ -97,11 +56,67 @@ Float *isFloat(char *str){
out->data = strtod(str, NULL);
return out;
}
+
Char *isChar(char *str){
- if (strlen(str) == 1){
- Char *out = malloc(sizeof(Char));
- out->data = str[0];
- return out;
+ if (str[0] == '\'' && str[strlen(str)-1] == '\''){
+ str++;
+ str[strlen(str)-1] = '\0';
+ if (strlen(str) == 1){
+ Char *out = CheckedMalloc(sizeof(Char));
+ out->data = str[0];
+ return out;
+ }
+ else return NULL;
+ }
+}
+
+Arr *isArr(char *str){
+ char *strbak = CheckedMalloc(strlen(str));
+ memcpy(strbak, str, strlen(str)+1);
+ if (strbak[0] == '[' && strbak[strlen(strbak)-1] == ']'){
+ Arr *arr = CheckedMalloc(sizeof(Arr));
+ arr->arr = CheckedMalloc(sizeof(literal));
+ strbak++;
+ strbak[strlen(strbak)-1] = '\0';
+ char *tok;
+ int length = 0;
+ size_t cCount = 1;
+ tok = strtok(strbak, ",");
+ while (tok != NULL){
+ cCount++;
+ arr = CheckedRealloc(arr, sizeof(Arr) * cCount);
+ arr->arr[cCount - 2] = *giveType(tok);
+ tok = strtok(NULL, ",");
+ length++;
+ }
+ arr->len = length;
+ free(strbak - 1);
+ return arr;
+ } else {
+ free(strbak);
+ return NULL;
}
- else return NULL;
+}
+
+literal *giveType(char *tok){
+ literal *out = CheckedMalloc(sizeof(literal));
+ Arr *arr = isArr(tok);
+ I64 *i64 = isNum(tok);
+ Float *fl = isFloat(tok);
+ Char *ch = isChar(tok);
+
+ if (arr != NULL){
+ out->arr = arr;
+ } else if (i64 != NULL){
+ out->i64 = i64;
+ } else if (fl != NULL){
+ out->fl = fl;
+ } else if (ch != NULL){
+ out->ch = ch;
+ } else {
+ fprintf(stderr, "data %s could not be typed\n", tok);
+ errno = 22;
+ Die();
+ }
+ return out;
}
diff --git a/comp/lucas-standen-NEA/code/global/util.h b/comp/lucas-standen-NEA/code/global/util.h
index b10a1f4..bf2a46c 100644
--- a/comp/lucas-standen-NEA/code/global/util.h
+++ b/comp/lucas-standen-NEA/code/global/util.h
@@ -4,16 +4,18 @@
#include <stdbool.h>
#include <errno.h>
#include <error.h>
+#include <ctype.h>
// functions for user
void Die(); // brings down the program
void *CheckedMalloc(long size); // malloc checked with autofree
void *CheckedRealloc(void *out, long size); // realloc checked with autofree
-int CheckedFree(void *ptr); // frees a pointer if it is in the array MEMptrs
-void CheckedFreeALL(); // frees all pointers in the array MEMptrs
-//checking functions, return NULL if the data is not of their type, else return the value.
+literal *giveType(char *tok); // gives a string a type
+
+// gives strings types
I64 *isNum(char *str);
Float *isFloat(char *str);
Char *isChar(char *str);
+literal *isArr(char *str);
diff --git a/comp/lucas-standen-NEA/code/tokenizer/Makefile b/comp/lucas-standen-NEA/code/tokenizer/Makefile
index 73e4033..38f92bf 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/Makefile
+++ b/comp/lucas-standen-NEA/code/tokenizer/Makefile
@@ -1,9 +1,9 @@
all: tokenizer parser
$(info done tokenizer!)
tokenizer: tokenizer.c
- cc tokenizer.c -c -o tokenizer.o
+ cc tokenizer.c -c -o tokenizer.o -ggdb
parser: parser.c
- cc parser.c -c -o parser.o
+ cc parser.c -c -o parser.o -ggdb
clean:
rm -rf *.o
diff --git a/comp/lucas-standen-NEA/code/tokenizer/parser.c b/comp/lucas-standen-NEA/code/tokenizer/parser.c
index 6ce8c5b..4bb9c3a 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/parser.c
+++ b/comp/lucas-standen-NEA/code/tokenizer/parser.c
@@ -4,10 +4,10 @@
#include "../global/types.h"
#include "../global/util.h"
-char *ReadFile(char *fileName); // reads the file into a single var
-char *Parse(char *fileName); // general parser function
+char *readFile(char *fileName); // reads the file into a single var
+char *parse(char *fileName); // general parser function
-char *ReadFile(char *filename){
+char *readFile(char *filename){
FILE *f = fopen(filename, "r");
if (f == NULL)
Die();
@@ -16,7 +16,7 @@ char *ReadFile(char *filename){
size_t len = ftell(f);
rewind(f);
- char *out = malloc(len+1);
+ char *out = CheckedMalloc(len+1);
char c;
for (int i = 0; i < len; i++){
@@ -32,6 +32,13 @@ char *ReadFile(char *filename){
return out;
}
-char *Parser(char *fileName){
- return ReadFile(fileName);
+char *preProcess(char *contents){
+ char *out = CheckedMalloc(strlen(contents)+1);
+ for (char c = contents[0]; c != '\0'; c = (contents += 1)[0]){
+ printf("%c", c);
+ }
+}
+
+char *parser(char *fileName){
+ return readFile(fileName);
}
diff --git a/comp/lucas-standen-NEA/code/tokenizer/parser.h b/comp/lucas-standen-NEA/code/tokenizer/parser.h
index e4f69a8..f90b777 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/parser.h
+++ b/comp/lucas-standen-NEA/code/tokenizer/parser.h
@@ -1,3 +1,3 @@
char *Parse(char *fileName); // general parser function
-
char *ReadFile(char *fileName); // reads the file into a single var
+char *preProcess(char *contents);
diff --git a/comp/lucas-standen-NEA/code/tokenizer/test b/comp/lucas-standen-NEA/code/tokenizer/test
new file mode 100755
index 0000000..797a447
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/tokenizer/test
Binary files differ
diff --git a/comp/lucas-standen-NEA/code/tokenizer/test.c b/comp/lucas-standen-NEA/code/tokenizer/test.c
new file mode 100644
index 0000000..49d6160
--- /dev/null
+++ b/comp/lucas-standen-NEA/code/tokenizer/test.c
@@ -0,0 +1,6 @@
+#include "parser.h"
+
+int main(){
+ char *sample = "(write \"hello\")";
+ preProcess(sample);
+}
diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c
index 0c30d36..3a59d88 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c
+++ b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.c
@@ -141,14 +141,8 @@ ast_node *tokenize(char *input){
}
if (tok[0] != '(' && tok[strlen(tok)-1] != ')' && depth == 0){
if (node->args[argCount] == NULL){
- node->literalArgs[argCount] = CheckedMalloc(sizeof(litteral));
- if (isNum(tok) != NULL){
- node->literalArgs[argCount]->i64 = isNum(tok);
- } else if (isFloat(tok) != NULL){
- node->literalArgs[argCount]->fl = isFloat(tok);
- } else if (isChar(tok) != NULL){
- node->literalArgs[argCount]->ch = isChar(tok);
- }
+ node->literalArgs[argCount] = giveType(tok);
+
}
argCount++;
}
@@ -158,7 +152,7 @@ ast_node *tokenize(char *input){
tok = strtok(NULL, " ");
} while (tok != NULL);
- CheckedFree(exp);
+ free(exp);
return node;
}
diff --git a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h
index 3cfaaf2..9e07921 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h
+++ b/comp/lucas-standen-NEA/code/tokenizer/tokenizer.h
@@ -9,4 +9,4 @@ int getBuiltIn(char *func, ast_node *node); // checks if a function is built in
void expressFunction(char *function, ast_node *node); // puts a string into the ast_node struct
ast_node *tokenize(char *input); // does the tokenization
void printAst(ast_node *root); // shows an ast and its sub nodes
-
+void freeAst(ast_node *head); // frees most of the ast;
diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ms b/comp/lucas-standen-NEA/writeup/coverpage.ms
index f99dd7f..e18f9c0 100644
--- a/comp/lucas-standen-NEA/writeup/coverpage.ms
+++ b/comp/lucas-standen-NEA/writeup/coverpage.ms
@@ -1,12 +1,9 @@
.TL
-The solution
-
-To bad code
+The solution To bad code
.AU
Lucas Standen
.AI
7949
-
.AB
.NH 1
@@ -16,71 +13,98 @@ This document is writen in roff and can be found online at:
https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/writeup
-It is using the ms macro of troff. It can be compiled using the Makefile, or make.sh. A table of
-contents has been generated using pdftocgen, it is embedded into the pdf, most pdf readers have
-a button to open it (firefox has it in the top left, in zathura press tab to view it).
-
-A note on formating of the roff, the text is limited to 100 characters per line and is writen in
-plain ascii, no utf8 emojis and the like. Code snippets are left in plain text, while full files
-are converted to a ps file via https://carbon.now.sh/ they should be 150mm ^ 2 (as ps is a vector
-format this wont lower quality, you might need to zoom in though) and then have there source linked
-above them; assuming they are from a file and not a small example.
+It is using the ms macro of troff. It can be compiled using the Makefile,
+or make.sh. A table of
+contents has been generated using pdftocgen, it is embedded into the pdf,
+most pdf readers have
+a button to open it (firefox has it in the top left, in zathura press tab
+to view it).
+
+A note on formating of the roff, the text is limited to 80 characters per
+line and is writen in
+plain ascii, no utf8 emojis and the like. Code snippets are left in plain
+text, while full files
+are converted to a ps file via https://carbon.now.sh/ they should be 150mm ^
+2 (as ps is a vector
+format this wont lower quality, you might need to zoom in though) and then
+have there source linked
+above them; assuming they are from a file and not a small example.
.NH 1
Analysis
.NH 2
The current problem
.LP
-For general small and simple projects, I write in C. However this leads to hours of debugging due to
-segfaults, and memory leaks. Due to the languages manual memory management the programmer is
-required to know so much information about the hardware they write for, and the second anything goes
+For general small and simple projects, I write in C. However this leads to
+hours of debugging due to
+segfaults, and memory leaks. Due to the languages manual memory management
+the programmer is
+required to know so much information about the hardware they write for,
+and the second anything goes
wrong, it is vague on how to fix things.
.B "I need a language that stops me from shooting myself in the foot"
-C has been standard for many decades now and its age is showing, it lacks many modern features like
-OOP, or higher level functional abstractions, that have become common in modern years due to there
-helpfulness. This is not to fault C's achievements either, the language is my personal choice for
-most projects for a reason, it's fast and powerful; any solution I make should not cut that away.
+C has been standard for many decades now and its age is showing, it lacks
+many modern features like
+OOP, or higher level functional abstractions, that have become common in
+modern years due to there
+helpfulness. This is not to fault C's achievements either, the language is
+my personal choice for
+most projects for a reason, it's fast and powerful; any solution I make
+should not cut that away.
.NH 2
A solution
.LP
.BI "Zippy LANG"
-A next generation language, for general use. Designed for keeping code simple, neat and readable.
-It will be similar to functional languages, known for there strict ability to keep code safe and
-practical. The language should be interpreted like python, perl and lisp, to allow for easy
+A next generation language, for general use. Designed for keeping code simple,
+neat and readable.
+It will be similar to functional languages, known for there strict ability
+to keep code safe and
+practical. The language should be interpreted like python, perl and lisp,
+to allow for easy
debugging tools.
-The goal of Zippy is to make codding easier, while remaining fast, with a interpreter writen in C.
+The goal of Zippy is to make codding easier, while remaining fast, with a
+interpreter writen in C.
.NH 2
What is a programming language
.NH 3
A very simple explanation
.LP
-At its lowest definition a PL is a set of specific words, that when given to a computer in the
-right order have a reproducible behaviour. A more human way of saying that, would be its how we
+At its lowest definition a PL is a set of specific words, that when given
+to a computer in the
+right order have a reproducible behaviour. A more human way of saying that,
+would be its how we
control computers.
.NH 3
Why are there so many
.LP
-When someone is looking at code it can often be seen as just that, however there are hundreds of
-languages that all take the idea of "code" in very different ways. Some are designed for specific
-hardware, some are designed for making general use programs while others are highly specialized.
-It is important to see "code", as more than just one overarching term and instead see where the code
+When someone is looking at code it can often be seen as just that, however
+there are hundreds of
+languages that all take the idea of "code" in very different ways. Some are
+designed for specific
+hardware, some are designed for making general use programs while others
+are highly specialized.
+It is important to see "code", as more than just one overarching term and
+instead see where the code
is being used, and evaluate it from that.
.NH 2
Researching, and getting a scope of the project
-.LP
-Before I start to design a language i should first find examples of others and find what i want my
+.LP
+Before I start to design a language i should first find examples of others
+and find what i want my
language to be like.
-I'd like my language to feel modern so i should take inspiration from what other modern languages
-do, however on the backed i want my language to be stable and fast, for that i should look at
+I'd like my language to feel modern so i should take inspiration from what
+other modern languages
+do, however on the backed i want my language to be stable and fast, for that
+i should look at
older projects.
.NH 3
@@ -88,37 +112,50 @@ Examples of older similar projects, that are a good base for my language
.NH 4
Python
.LP
-Python is a high level OOP language that was designed in 1991. It was made to make programming easy
-while still being able to use some of C's functions. Although it has become standard for many use
+Python is a high level OOP language that was designed in 1991. It was made
+to make programming easy
+while still being able to use some of C's functions. Although it has become
+standard for many use
cases, it is slow and inefficient, and very bloated.
https://www.python.org/
-Zippy should take pythons high level abstractions, as they make programming very easy and it should
-try and take notes from its libraries as they are mostly well written, and well documented.
+Zippy should take pythons high level abstractions, as they make programming
+very easy and it should
+try and take notes from its libraries as they are mostly well written,
+and well documented.
.NH 4
Lisp
.LP
-Lisp is the second ever programming language, developed at MiT, it is the first functional language,
-creating many common features like higher order functions, recursion, and garbage collection. It is
-generally not used any more as it feels old compared to other functional languages, like Ocaml or
+Lisp is the second ever programming language, developed at MiT, it is the
+first functional language,
+creating many common features like higher order functions, recursion, and
+garbage collection. It is
+generally not used any more as it feels old compared to other functional
+languages, like Ocaml or
Haskell.
https://lisp-lang.org/
-Zippy should try to take alot from the syntax of lisp, () make it easy to see what parts of code
+Zippy should try to take alot from the syntax of lisp, () make it easy to
+see what parts of code
will effect what, and make things easy to parse.
.NH 4
Perl
.LP
-Perl is scripting language designed for use in linux, when bash is too slow, or not suited for the
-job. Perl is often described as the glue of the universe (see xkcd https://3d.xkcd.com/224/).
-Its syntax is quite strange however and it is slow. Making it poorly suited towards general use.
+Perl is scripting language designed for use in linux, when bash is too slow,
+or not suited for the
+job. Perl is often described as the glue of the universe (see xkcd
+https://3d.xkcd.com/224/).
+Its syntax is quite strange however and it is slow. Making it poorly suited
+towards general use.
https://www.perl.org/
-Zippy should take from perls minimalism, it is a small language that is of a similar size to bash
-or zsh, while feeling closer to python. If Zippy can achieve a similar small size, while remaining
+Zippy should take from perls minimalism, it is a small language that is of
+a similar size to bash
+or zsh, while feeling closer to python. If Zippy can achieve a similar small
+size, while remaining
powerful I will be happy.
.NH 3
@@ -126,36 +163,47 @@ Examples of new similar projects that are also a good base
.NH 4
Gleam
.LP
-Gleam is a modern language releasing in the past 5 years. It is highly functional, with no mutable
-data, no traditional loops. Instead recursion can be used to replace alot of these features.
-Gleam compiles to erlang/Beam bytecode, much like java to the jvm, and doing this has made Gleam
+Gleam is a modern language releasing in the past 5 years. It is highly
+functional, with no mutable
+data, no traditional loops. Instead recursion can be used to replace alot
+of these features.
+Gleam compiles to erlang/Beam bytecode, much like java to the jvm, and doing
+this has made Gleam
a highly scalable language with good library support out the box.
https://gleam.run/
-Zippy should take from the functional elements of Gleam, as they keep programs safer, however Zippy
+Zippy should take from the functional elements of Gleam, as they keep programs
+safer, however Zippy
should not remove all procedural elements, as for loops are very helpful
.NH 4
Haskell
.LP
-Haskell is another modern functional language known for being very complicated, however incredibly
+Haskell is another modern functional language known for being very complicated,
+however incredibly
powerful. Its syntax feels very mathematical, and incredibly terse.
https://www.haskell.org/
-Perhaps Zippy could learn from Haskell, as it provides functional and procedural elements, making it
+Perhaps Zippy could learn from Haskell, as it provides functional and
+procedural elements, making it
a well rounded language
.NH 4
Hare
.LP
-Hare was designed to be a 100 year language, and thus stability is its main goal, it is not set to
-have a syntax change any time soon, and it has strong emphasis on memory safety. It fits into the
-same part of the tech stack as C, and thus it can be used for some very low level work.
+Hare was designed to be a 100 year language, and thus stability is its main
+goal, it is not set to
+have a syntax change any time soon, and it has strong emphasis on memory
+safety. It fits into the
+same part of the tech stack as C, and thus it can be used for some very low
+level work.
https://harelang.org/
-I think Zippy should have a strong emphasis on stability, much like Hare, to many times have I segfaulted due to a
-tiny mistake. Zippy should also look to Hare's small size, you can buy a copy of Hare on a
+I think Zippy should have a strong emphasis on stability, much like Hare,
+to many times have I segfaulted due to a
+tiny mistake. Zippy should also look to Hare's small size, you can buy a
+copy of Hare on a
.B "SINGLE 3 1/2'' FLOLPY"
@@ -165,36 +213,48 @@ This is something I too should try to achieve.
.NH 3
What should be taken away from these languages?
.LP
-I was already leaning towards functional programming when I started this project however now I
-believe it's the only option for producing safe applications. Zippy will be a functional language
+I was already leaning towards functional programming when I started this
+project however now I
+believe it's the only option for producing safe applications. Zippy will be
+a functional language
with a strong emphasis on recursion.
-I also believe that I should take size of the interpreter into account, as this is important for
+I also believe that I should take size of the interpreter into account,
+as this is important for
keeping the project manageable and consistent.
-And finally I think that syntax should be inspired by Lisp, although Lisp itself can be a messy
-language, with the right changes I am confident that I can make a attractive language for the 21st
+And finally I think that syntax should be inspired by Lisp, although Lisp
+itself can be a messy
+language, with the right changes I am confident that I can make a attractive
+language for the 21st
century.
.NH 2
Clients
.LP
-In a project of this nature, the Client is every programmer alive; which is a pretty large scope.
-To narrow this down as much as possible, I will interview a small handful of people throughout the
+In a project of this nature, the Client is every programmer alive; which is
+a pretty large scope.
+To narrow this down as much as possible, I will interview a small handful
+of people throughout the
project, of different skill levels.
.NH 3
Client 1, Amy C
.LP
-My first client is a friend of mine, Amy C, she is a confident programmer who has completed many
-complicated projects. I am choosing her as a client as she can give me technical feed back on my
+My first client is a friend of mine, Amy C, she is a confident programmer
+who has completed many
+complicated projects. I am choosing her as a client as she can give me
+technical feed back on my
project and its function/utility.
.NH 3
-Client 2, Rayn M
-.LP
-Another friend of mine, Rayn M, is a technical computer user, however he does not know how to
-program at a high level. He will be a good client as he can show me how my language looks to
-some one who doesn't understand the inside workings, helping me design the structure of the code.
+Client 2, Rayn M
+.LP
+Another friend of mine, Rayn M, is a technical computer user, however he
+does not know how to
+program at a high level. He will be a good client as he can show me how my
+language looks to
+some one who doesn't understand the inside workings, helping me design the
+structure of the code.
.NH 3
Client 3, a normie
.LP
@@ -202,37 +262,46 @@ some stuff about how the normie finds the completed project.
.NH 3
Client 4, myself
.LP
-I've wanted to take out a project like this for a long long time, and this is the perfect
-opportunity to do so, I will be assessing myself along the way of this, building the project to my
+I've wanted to take out a project like this for a long long time, and this
+is the perfect
+opportunity to do so, I will be assessing myself along the way of this,
+building the project to my
personal specification.
.NH 2
Questionnaires
.LP
-It is important to get feedback from end users, so I will take multiple questionnaires throughout
-the project. I will then use them to slightly edit the requirements of my project this should make
+It is important to get feedback from end users, so I will take multiple
+questionnaires throughout
+the project. I will then use them to slightly edit the requirements of my
+project this should make
the final outcome more helpful and what people want.
-In the section bellow you will find questionnaires from the analyses stage of my project.
+In the section bellow you will find questionnaires from the analyses stage
+of my project.
.NH 3
-Questionnaire 1 for Amy C
+Questionnaire 1 for Amy C
.BI "[30th April 2024]"
.BI "answered by Amy, see pull request she left"
-.NH 4
+.NH 4
What do you find the most important in a language? (eg: speed, readability)
.LP
Speed, readability, debugging ease and disk space efficiency.
.NH 4
-What tools are important for a language to have? (eg: pkg-manager, IDE integration)
+What tools are important for a language to have? (eg: pkg-manager, IDE
+integration)
.LP
-IDE integration (things like tab complete and debugging tools), a package manager, and the ability
+IDE integration (things like tab complete and debugging tools), a package
+manager, and the ability
to interact with the user through the command line easily.
.NH 4
-What features do you like from other languages (eg: C's advanced memory management, haskell's terse
+What features do you like from other languages (eg: C's advanced memory
+management, haskell's terse
syntax)
.LP
-The ability to pass the memory reference of an object or function and a collection of built-in or
+The ability to pass the memory reference of an object or function and a
+collection of built-in or
standard functions like "print", "split", or "sort".
.NH 4
What do you want to program in this language (eg: websites, low level systems)
@@ -249,18 +318,23 @@ I like a good balance between the two.
.NH 4
What were your last 3 projects? (could they have been written in Zippy?)
.LP
-A website, a small command-line tool and a midi keyboard (program runs on a Raspberry Pi Pico).
+A website, a small command-line tool and a midi keyboard (program runs on
+a Raspberry Pi Pico).
.NH 4
-How many languages would you use on a single project? (could Zippy be used in your codebase?)
+How many languages would you use on a single project? (could Zippy be used
+in your codebase?)
.LP
-I try to use as little languages in a project as possible, so likely not in an existing project.
+I try to use as little languages in a project as possible, so likely not in
+an existing project.
.NH 4
Do you care for low level control, or would you prefer high level abstractions?
.LP
-I think low-level control is very important, but high-level abstractions are convenient, so a good
+I think low-level control is very important, but high-level abstractions
+are convenient, so a good
balance between the two is best.
.NH 4
-Would you be happy to develop libraries for things that aren't already implemented
+Would you be happy to develop libraries for things that aren't already
+implemented
(eg: an SQL library)
.LP
Potentially if it is simple enough to implement new things.
@@ -268,46 +342,59 @@ Potentially if it is simple enough to implement new things.
.NH 3
Notes from questionnaire 1
.LP
-Some of the key things that I'm taking away from this first questionnaire, are my client/users
-initial needs and use cases. I think it's clear my language can be of assistance to my client, Zippy
-will be a good language for web back ends and small command line tools, which my client expressed
+Some of the key things that I'm taking away from this first questionnaire,
+are my client/users
+initial needs and use cases. I think it's clear my language can be of
+assistance to my client, Zippy
+will be a good language for web back ends and small command line tools,
+which my client expressed
interested in.
-I find the fact my client is worried by executable size interesting, however I doubt it will be an
-issue; a ballooning code-base is unlikely as only one person is writing the project.
+I find the fact my client is worried by executable size interesting, however
+I doubt it will be an
+issue; a ballooning code-base is unlikely as only one person is writing
+the project.
-I am also taking on the fact that my client wants good command line tools, so a pkg-manager and
-bundler should be a priority, perhaps they could be written in Zippy after the interpreter is done.
+I am also taking on the fact that my client wants good command line tools,
+so a pkg-manager and
+bundler should be a priority, perhaps they could be written in Zippy after
+the interpreter is done.
-.NH 2
+.NH 2
The first elements of the project
.LP
-At this stage I can say that I'm confident in my project and its scope. I have a goal in mind for
+At this stage I can say that I'm confident in my project and its scope. I
+have a goal in mind for
it.
.B "The key things to take away from this section are:"
-.B ----
-Make a high level language with a useable set of features, to replace C in many situations.
+.B ----
+Make a high level language with a useable set of features, to replace C in
+many situations.
-.B ----
+.B ----
Keep the language readable and easy, with powerful tools available.
-.B ----
+.B ----
Ensure the language is well supported with tools like a pkg-manager.
.NH 2
Moddeling
.LP
-In larger projects, when a programmer needs a data structure that the language they are writing in
+In larger projects, when a programmer needs a data structure that the language
+they are writing in
doesn't provide, they will need to make their own.
-Bellow are a few examples of these data structures that C doesn't already provide.
+Bellow are a few examples of these data structures that C doesn't already
+provide.
.NH 3
Linked lists
.LP
-this is an alternative implementation of a list, where you store some data, and the memory address
-to the next node. Then you can move through the list by reading the data then reading the data of
+this is an alternative implementation of a list, where you store some data,
+and the memory address
+to the next node. Then you can move through the list by reading the data
+then reading the data of
the next node, and then repeating until the 'next' part of the node is empty.
A diagram showing this can be seen here:
@@ -315,8 +402,10 @@ A diagram showing this can be seen here:
.PSPIC linkedlist.ps
.LP
-In C this is easy to implement as you can find a memory address very easily with '&' to find where
-a bit of data is stored. I will need to use a 'struct', which is a bit like a class in C (however
+In C this is easy to implement as you can find a memory address very easily
+with '&' to find where
+a bit of data is stored. I will need to use a 'struct', which is a bit like
+a class in C (however
you can't attach a function to it). A simple implementation looks like this:
typedef struct ll {
@@ -326,29 +415,34 @@ typedef struct ll {
} ll;
.LP
-The pro's of a linked list are the fact that they can have data appended to the start or end easily
+The pro's of a linked list are the fact that they can have data appended to
+the start or end easily
by changing the root node, or the next node.
-Linked lists have a few downsides, for example you can't move through them backwards, and unless you
+Linked lists have a few downsides, for example you can't move through them
+backwards, and unless you
store it on its own, you cant find the length of it in a fast way.
-In my project I would like to use linked list in the AST (see later sections for info), and to store
+In my project I would like to use linked list in the AST (see later sections
+for info), and to store
lists in the language.
.NH 3
Dictionaries
.LP
-A dictionary is a simple data structure that just stores, a bit of data, and a number or string to
+A dictionary is a simple data structure that just stores, a bit of data,
+and a number or string to
identify it.
A dictionary like a linked list can be implemented with a struct in c like so:
typedef struct dict {
void *data;
- int id;
+ int id;
} dict;
.LP
-In my project I think I could use a linked list represent a Zippy variable and an ID that i can use
+In my project I think I could use a linked list represent a Zippy variable
+and an ID that i can use
to identify it, this could make execution faster as i can compare ID's
rather than string values
@@ -357,49 +451,63 @@ Prototyping hard features
.NH 3
Abstract Syntax Trees (AST) theory
.LP
-In a programming language many abstract data types will be used to allow the code to execute,
-however I think the hardest part of this is an abstract syntax tree. This is a data structure that
-holds the code in an ordered form that can be analysed and executed in a simple way. It is a tree
-structure, with the top node being a root and all lower nodes being things needed to calculate the
-root. It can be used not only for code but also for mathematical expressions. I think the easiest
+In a programming language many abstract data types will be used to allow
+the code to execute,
+however I think the hardest part of this is an abstract syntax tree. This
+is a data structure that
+holds the code in an ordered form that can be analysed and executed in a
+simple way. It is a tree
+structure, with the top node being a root and all lower nodes being things
+needed to calculate the
+root. It can be used not only for code but also for mathematical expressions. I
+think the easiest
way to show it is via a mathematical example
Take the follow expression for example:
.BX "(1 + (10 * (3 - (2 * 4))))"
-We know that this is equal to -49
+We know that this is equal to -49
-However for a computer this is far harder to understand. This is because it has no understanding of
+However for a computer this is far harder to understand. This is because it
+has no understanding of
order of operation
To solve this we use an AST (abstract syntax tree)
-When you solve that expression you know to start with (2 * 4), then 3 - the answer to that and so on
+When you solve that expression you know to start with (2 * 4), then 3 -
+the answer to that and so on
We can represent the steps as a tree like so:
-.PSPIC ast.ps
+.PSPIC ast.ps
.I "[Evalutates to 2 * (2 + 2)]"
-As you can see, you need to evaluate the expression in the most brackets first, then the next, and
+As you can see, you need to evaluate the expression in the most brackets
+first, then the next, and
so on, working you way up
-You can evaluate code in a similar way, treating each operation (such as +-*/) as functions, doing
-the most deeply nested function first, then working up. Each expression can be represented in this
+You can evaluate code in a similar way, treating each operation (such as +-*/)
+as functions, doing
+the most deeply nested function first, then working up. Each expression can
+be represented in this
tree, then to show a whole program you can create a list of trees
.NH 3
Implementing AST's
.LP
-As a prototype i will make a program that can take mathematical expressions and evaluate them, and
+As a prototype i will make a program that can take mathematical expressions
+and evaluate them, and
allowing for functions (in the form f(x)).
It will do this via AST's
-This prototype takes 173 lines of code, it takes a string as a cmd line argument then converts it
-into an abstract syntax tree, and finally it executes it. This is just a simple prototype and thus
-it is small in scope. It can only do simple operators (+-*/) and requires literal values to be
+This prototype takes 173 lines of code, it takes a string as a cmd line
+argument then converts it
+into an abstract syntax tree, and finally it executes it. This is just a
+simple prototype and thus
+it is small in scope. It can only do simple operators (+-*/) and requires
+literal values to be
surrounded by [] so it knows its not another expression to evaluate.
https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/code/proto/ast
@@ -407,20 +515,30 @@ https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/code/pro
.PSPIC astg.ps
.LP
-Above is the code for the AST, it stores an operation (which is just an integer), and it stores
-a real left and real right value, along side two other nodes. The real values are integers, this
-would be the 2 numbers in reference in the expression. The 2 nodes are a recursive data structure,
-much like putting an object of a class inside the definition of that class itself. They are used to
-store values that may still be expressions, for example (+ [1] (+ [1] [1])) the second part of this
-expression would be in the "right" variable. When code is executed I can check if "left", or "right"
-are null and if they are i know that i am at the lowest expression that is only literal values.
+Above is the code for the AST, it stores an operation (which is just an
+integer), and it stores
+a real left and real right value, along side two other nodes. The real values
+are integers, this
+would be the 2 numbers in reference in the expression. The 2 nodes are a
+recursive data structure,
+much like putting an object of a class inside the definition of that class
+itself. They are used to
+store values that may still be expressions, for example (+ [1] (+ [1] [1]))
+the second part of this
+expression would be in the "right" variable. When code is executed I can
+check if "left", or "right"
+are null and if they are i know that i am at the lowest expression that is
+only literal values.
Then I can execute that node and work my way up the tree.
-The exec function will execute the operation, unless there is a deeper node, if there is a deeper
-node, then it executes it, and places the result in the right or left spot respectively.
+The exec function will execute the operation, unless there is a deeper node,
+if there is a deeper
+node, then it executes it, and places the result in the right or left spot
+respectively.
-Expressions are taken as input with the following code, and converted into the AST:
+Expressions are taken as input with the following code, and converted into
+the AST:
https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/code/proto/ast
@@ -434,26 +552,32 @@ Here is an example input and output:
Note the [] used to tell the program where the literal values are.
-Overall this was a relatively successful prototype, however it isn't fully functional as a language
+Overall this was a relatively successful prototype, however it isn't fully
+functional as a language
it has fit the design.
-The rest of the code is the process of converting the string input to literal values and inserting
+The rest of the code is the process of converting the string input to literal
+values and inserting
them into the AST
.NH 3
Feedback
.LP
-From my first Client (Amy C), she said that putting the numbers inside square brackets was
-inconvenient and annoying and it would be better if the numbers were separated by spaces instead of
+From my first Client (Amy C), she said that putting the numbers inside square
+brackets was
+inconvenient and annoying and it would be better if the numbers were separated
+by spaces instead of
separate square bracket surrounded literals.
-As this is a prototype I won't fix this issue, however in the actual language this is a needed
+As this is a prototype I won't fix this issue, however in the actual language
+this is a needed
feature that I will be implementing.
.NH 3
Mixing linked lists and AST's
.LP
-Mixing these 2 data structures together you can repressent an entire program. A linked list of
+Mixing these 2 data structures together you can repressent an entire program. A
+linked list of
AST's is how Zippy will repressent all code the user writes
Here is an example of this:
@@ -461,57 +585,69 @@ Here is an example of this:
.PSPIC AST+LL.ps
.LP
-In this example the linked list is represented by the numbers seen at the top, and the AST's are the
+In this example the linked list is represented by the numbers seen at the top,
+and the AST's are the
tree's moving down.
-As you can see when a value is referenced that is from a different AST the tree will link to another
-one. This will work the same for function calls, however instead of linking to value definitions it
+As you can see when a value is referenced that is from a different AST the
+tree will link to another
+one. This will work the same for function calls, however instead of linking
+to value definitions it
will link to function definitions.
.NH 2
Objectives
.NH 3
An interpreter for the Zippy language
-.NH 4
+.NH 4
Linked list of AST's
.LP
-All of a loaded program should be represented as a linked list of individual AST's, The developer
-should be able to access the AST for easy hacking. Functions can be represented as a pointer to
+All of a loaded program should be represented as a linked list of individual
+AST's, The developer
+should be able to access the AST for easy hacking. Functions can be represented
+as a pointer to
another part of the list.
.NH 4
-A lisp like syntax
+A lisp like syntax
.LP
This is to ensure the language can be parsed quickly, and is easy to write.
.NH 4
Functional language
.LP
-This language should lean into the functional programming paradigm, taking inspiration from other
+This language should lean into the functional programming paradigm, taking
+inspiration from other
functional languages such as lisp, and gleam.
.NH 5
Recursion
.LP
-Zippy must support recursive algorithms being implemented into it, this will make the AST, have
+Zippy must support recursive algorithms being implemented into it, this will
+make the AST, have
nodes linking back to parent nodes in a linked list.
.NH 5
Higher order functions
.LP
-Zippy must support the usage of higher order functions, this will mean the AST needs to have an
-unlimited depth as otherwise the limit would be quickly reached, it can't be hard-coded, it must be
+Zippy must support the usage of higher order functions, this will mean the
+AST needs to have an
+unlimited depth as otherwise the limit would be quickly reached, it can't
+be hard-coded, it must be
dynamic.
.NH 4
Performance
.LP
-The interpreter must be fast and memory efficient, the language is designed to work as an
-alternative to C, one of the fastest languages of all time, the interpreter must be fast, however
+The interpreter must be fast and memory efficient, the language is designed
+to work as an
+alternative to C, one of the fastest languages of all time, the interpreter
+must be fast, however
memory footprint is not as much of a requirement.
.NH 4
Safe
.LP
-Code that the user writes must be safe, and not prone to errors. This can be handeled via the strong
+Code that the user writes must be safe, and not prone to errors. This can
+be handeled via the strong
syntax checker and type safety.
.NH 3
-Standard library for Zippy
+Standard library for Zippy
.NH 4
io
.LP
@@ -519,17 +655,21 @@ The language must have a simple to use I/O library to make outputs easy.
.NH 4
string
.LP
-The language should have a sting library that provides a string type, and many complex algorithms
-that can be applied to them (concatenation, insertion, appending, splitting, stripping).
+The language should have a sting library that provides a string type, and
+many complex algorithms
+that can be applied to them (concatenation, insertion, appending, splitting,
+stripping).
.NH 4
sorts
.LP
-The language should have a sorting library that provides algorithms used for sorting (like merge
+The language should have a sorting library that provides algorithms used
+for sorting (like merge
sort).
.NH 4
graphs
.LP
-the language must have a graph library, that allows for easy creation and working with graphs, it
+the language must have a graph library, that allows for easy creation and
+working with graphs, it
should provide many algorithms to help traverse these graphs
.NH 3
@@ -537,32 +677,42 @@ Tooling for the Zippy language
.NH 4
zpypkg
.LP
-Zippy must provide a package manager, that allows code to be shared between multiple users, easily.
-It should sync projects via git and allow them to be stored on any git host the user likes.
+Zippy must provide a package manager, that allows code to be shared between
+multiple users, easily.
+It should sync projects via git and allow them to be stored on any git host
+the user likes.
.NH 4
Syntax checker
.LP
-Zippy shouldn't have a built in syntax checker, instead it should be something that can be run
-independently of the interpreter, this means that a lot of the checking that interpreted languages
-do, can be done once by the developer, before shipping the app, as opposed to every time the program
+Zippy shouldn't have a built in syntax checker, instead it should be something
+that can be run
+independently of the interpreter, this means that a lot of the checking that
+interpreted languages
+do, can be done once by the developer, before shipping the app, as opposed
+to every time the program
is run, which brings down performance.
.NH 3
Integration with C, via a C API
.NH 4
C API
.LP
-You should be able to execute a string of Zippy code in C using a library that is linked with
-interpreter. This could allow Zippy to be used as a configuration language like Lua.
+You should be able to execute a string of Zippy code in C using a library
+that is linked with
+interpreter. This could allow Zippy to be used as a configuration language
+like Lua.
.NH 2
Desirable features
.LP
-If time allows I'd like to add some of the following features to flesh out the language:
+If time allows I'd like to add some of the following features to flesh out
+the language:
.NH 3
Raylib support
.LP
-Raylib is a powerful game engine for C, however it has been ported to most languages under the
-sun due to how simple it is. If I have time, porting Raylib to Zippy would make the language
+Raylib is a powerful game engine for C, however it has been ported to most
+languages under the
+sun due to how simple it is. If I have time, porting Raylib to Zippy would
+make the language
far more useable, as it can be use for graphics programming.
https://www.Raylib.com/
@@ -570,20 +720,26 @@ https://www.Raylib.com/
.NH 3
Vim integration.
.LP
-Zippy should have integration with the Vim editor for syntax highlighting, this can be done via
-generating a linked list of AST's then colouring function calls a specific colour, and variables
+Zippy should have integration with the Vim editor for syntax highlighting,
+this can be done via
+generating a linked list of AST's then colouring function calls a specific
+colour, and variables
another, etc, etc.
.NH 3
LSP
.LP
-A LSP (language server protocol), is used in code IDE's to auto complete code for you, I'd
-like one for Zippy. Although I am unsure as to how to tackle this. I believe a program called
+A LSP (language server protocol), is used in code IDE's to auto complete
+code for you, I'd
+like one for Zippy. Although I am unsure as to how to tackle this. I believe
+a program called
treesitter can be helpful for this.
.NH 3
Networking sockets
.LP
-If possible I'd also like to provide bindings for unix network sockets, however this would be
-very difficult, as I would need to allow Zippy stucts to be directly converted to C stucts,
+If possible I'd also like to provide bindings for unix network sockets,
+however this would be
+very difficult, as I would need to allow Zippy stucts to be directly converted
+to C stucts,
when executing ELF symbols (Parts of an execuable file).
.NH 1
@@ -591,10 +747,13 @@ Design
.NH 2
Language specification
.LP
-Like any other programming language Zippy needs to have a defined syntax, as mentioned in the
-objectives section of Analysis, I want the language to follow a lisp like syntax.
+Like any other programming language Zippy needs to have a defined syntax,
+as mentioned in the
+objectives section of Analysis, I want the language to follow a lisp like
+syntax.
-I also believe higher order functions should be taken as standard and many core functions will use
+I also believe higher order functions should be taken as standard and many
+core functions will use
them.
.NH 3
@@ -619,7 +778,8 @@ Advanced types
.LP
function - a function that can be used
-generic - should be avoided, removes checks for data types when inputting values to functions
+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.
.NH 4
@@ -629,7 +789,8 @@ Arrays can be show like so:
x:type[]
-With x being the variable name, type being the type of variable, and [] showing its an array
+With x being the variable name, type being the type of variable, and []
+showing its an array
All arrays are dynamic, represented by a linked list on the back end.
.NH 5
@@ -648,7 +809,8 @@ defun
)
-Returns a function that take A and B as an argument (fixed types), and returns a value of
+Returns a function that take A and B as an argument (fixed types), and
+returns a value of
returntype.
.NH 4
@@ -686,7 +848,8 @@ for
.LP
(for i (condition) function)
-Runs the function while the condition is true, and increments i every time the function
+Runs the function while the condition is true, and increments i every time
+the function
is called.
.NH 4
@@ -701,14 +864,15 @@ symbol
.LP
(symbol a:type b:type c:type returntype name:char[] elf:char[])
-Returns a function that takes arguments A, B, C (of fixed types), the name of the function,
+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
.NH 4
Arithmetic operations
.LP
-Simple operations
+Simple operations
(+ a b) returns a + b
@@ -737,7 +901,7 @@ All return true or false
.NH 4
cast
-.LP
+.LP
(cast a:generic type:char[])
returns a but cast to data type type, which is a string.
@@ -754,14 +918,16 @@ terminate
.LP
(terminate error:error)
-Kills the program at the current point, frees all related memory, prints error info stored in error.
+Kills the program at the current point, frees all related memory, prints
+error info stored in error.
.NH 4
return
.LP
(return a:type)
-Must be used in defun, returns "a" from the function, "a" must be of the functions return type.
+Must be used in defun, returns "a" from the function, "a" must be of the
+functions return type.
.NH 3
List of keywords
@@ -791,13 +957,15 @@ let
.NH 2
Memory management
.LP
-Memory will be allocated when a variable is initialized, and freed when the program stops.
-Although this isn't the fastest method, it is simple and has less runtime overhead.
+Memory will be allocated when a variable is initialized, and freed when the
+program stops.
+Although this isn't the fastest method, it is simple and has less runtime
+overhead.
-.NH 2
+.NH 2
Questionnaire 2 for Rayn M
.NH 3
-How do you find this layout of the language?
+How do you find this layout of the language?
.LP
.I "(5-6 points)"
- I like the immutable nature of the language
@@ -809,11 +977,14 @@ How do you find this layout of the language?
.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
+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.
+However as per his request I will change the terminate keyword to the more
+normal exit.
An updated keyword list is as flows:
@@ -842,38 +1013,52 @@ let
.NH 2
What language do you use to make a programming language
.LP
-As mentioned before Zippy will be written in C, with some parts being written in Zippy itself.
-I will try and keep most dependencies/libraries to a minimal to make the project easier to manage.
+As mentioned before Zippy will be written in C, with some parts being written
+in Zippy itself.
+I will try and keep most dependencies/libraries to a minimal to make the
+project easier to manage.
.NH 3
What is C?
.LP
-C was made by Dennis Ritchie, in 1972 at AT&T's bell labs. It was designed to make programming low
-level systems far easier than it had been before. It was used to create the unix operating system
-which would go on to inspire most modern operating systems in some way. (macos still has code from
+C was made by Dennis Ritchie, in 1972 at AT&T's bell labs. It was designed
+to make programming low
+level systems far easier than it had been before. It was used to create the
+unix operating system
+which would go on to inspire most modern operating systems in some way. (macos
+still has code from
the original release of C+unix).
-The language quickly caught on outside of bell labs after more available releases of unix arrived
-such as bsd 4.4, sun os and GNU. It was found to be able to do all the things that you could do in
+The language quickly caught on outside of bell labs after more available
+releases of unix arrived
+such as bsd 4.4, sun os and GNU. It was found to be able to do all the things
+that you could do in
ASM however with far less a headache.
.NH 3
Why is C?
.LP
-As mentioned C can do anything that ASM can do, meaning it is lightning fast and can take advantage
-of direct memory access. This allows you to make very fast lightweight executables that can rival
-the performance of handwritten ASM (often beating it if you enable compiler optimisations). It is
-this that makes C the perfect language for any and all programming languages, where speed is key,
+As mentioned C can do anything that ASM can do, meaning it is lightning fast
+and can take advantage
+of direct memory access. This allows you to make very fast lightweight
+executables that can rival
+the performance of handwritten ASM (often beating it if you enable compiler
+optimisations). It is
+this that makes C the perfect language for any and all programming languages,
+where speed is key,
and allfeatures need to be available are present.
.NH 3
How is C?
.LP
-C is compiled to ASM, the main compilers available are clang, gcc and MSVC, I will be using gcc
+C is compiled to ASM, the main compilers available are clang, gcc and MSVC,
+I will be using gcc
as it is generally standard in linux environments.
-Many build systems are available for C, the main ones being cmake and gnu make. Both of them have
-the goal of putting the compiling process in one command. Cmake is cross platform (sorta windows
+Many build systems are available for C, the main ones being cmake and gnu
+make. Both of them have
+the goal of putting the compiling process in one command. Cmake is cross
+platform (sorta windows
doesn't work well but it does work).
.NH 3
@@ -904,29 +1089,35 @@ C sockets + Zippy sockets
.NH 3
Modularization
.LP
-To make the project more manageable I will split it into many C files, this is to keep it from
+To make the project more manageable I will split it into many C files,
+this is to keep it from
becoming impossible to edit code.
The file layout looks as follows:
PLACE HERE
-As you can see this is split up over around 40 files and 16 folders, each file should not go over
+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.
-This level of modularization in needed for the development of Zippy as without it, files will become
+This level of modularization in needed for the development of Zippy as
+without it, files will become
a mess that can't be worked with.
-All .c files will be compiled into .o files, then the .o files can be linked with the final zpy.c
+All .c files will be compiled into .o files, then the .o files can be linked
+with the final zpy.c
to generate the final executable.
-.NH 4
+.NH 4
Build system
.LP
-The entire project is being build with GNU make files, each folder that builds something will have
-its own makefile. This will mean the entire project can be compiled with a single make in the root
-folder of the project.
+The entire project is being build with GNU make files, each folder that
+builds something will have
+its own makefile. This will mean the entire project can be compiled with a
+single make in the root
+folder of the project.
Example of make:
@@ -934,48 +1125,76 @@ make -j2
This will build all files specified by 'Makefile' with 2 threads.
-The project should be build with gcc, and ld. It should be build with the -O3 build flag to ensure
-the program runs as fast as possible. -O3 forces the compiler to build with optimizations.
+The project should be build with gcc, and ld. It should be build with the
+-O3 build flag to ensure
+the program runs as fast as possible. -O3 forces the compiler to build with
+optimizations.
-When the project is finished, I will try compiling with clang and tcc, to compare performance.
+When the project is finished, I will try compiling with clang and tcc,
+to compare performance.
-.NH 2
+.NH 2
Time table
.LP
-The first step is to tackle the interpreter, so the zpy.c file needs to be finished. The tokenizer,
-execution, and libs folders need to be finished, after this point you should be able to execute
+The first step is to tackle the interpreter, so the zpy.c file needs to be
+finished. The tokenizer,
+execution, and libs folders need to be finished, after this point you should
+be able to execute
Zippy code however not syntax check it or get error handling.
-The next step is zpycheck, the syntax and error handler, this should be ran before code is shipped
+The next step is zpycheck, the syntax and error handler, this should be ran
+before code is shipped
to the user. It can reuse a lot of code from the tokenizer and execution steps.
-Finally I need to make zpypkg, this should be easy as most of it can be written in Zippy, and a few
-bits can be written in bash. It should be a good test to how Zippy can be written.
+Finally I need to make zpypkg, this should be easy as most of it can be
+written in Zippy, and a few
+bits can be written in bash. It should be a good test to how Zippy can
+be written.
-If time allows it is at this point that I will write a Raylib library and a unix/C sockets library.
+If time allows it is at this point that I will write a Raylib library and
+a unix/C sockets library.
.NH 2
Flow through the system
.LP
-The alogrithum to run code is quite complex however it can be boiled down to a few simple steps:
+The alogrithum to run code is quite complex however it can be boiled down
+to a few simple steps:
.B "read the text file (strip line breaks and tabs)"
+.LP
.B "create an empty linked list"
-.B "get the first expression from the text file (with be encapsulated with "()""
+.LP
+.B "get the first expression from the text file (with be encapsulated with
+"()""
.B "get the function call and its args into a token"
-.B "if the arguments of the function are there own function call, then convert them into a token"
+.LP
+.B "if the arguments of the function are there own function call, then
+convert them into a token"
+.LP
.B "set that token as the argument in the first token"
+.LP
.B "append the root token to the linked list"
+.LP
.B "repeat until the text file string is empty"
+.LP
.B "allocate memory for the program and prepare the exection step"
-.B "at the start of the linked list traverse to the bottem of the tree (made of tokens)"
+.LP
+.B "at the start of the linked list traverse to the bottem of the tree
+(made of tokens)"
+.LP
.B "execute the lowest token"
+.LP
.B "repeat until all tokens including the root have been executed"
+.LP
.B "move to the next node of the linked list"
+.LP
.B "repeat until the linked list is empty"
-Within each of these steps is many smaller steps. The hardest part will be making the tokens, as
-this requires alot of string manipultation. The execution will be a recursive alogrithum. All trees
+.LP
+Within each of these steps is many smaller steps. The hardest part will be
+making the tokens, as
+this requires alot of string manipultation. The execution will be a recursive
+alogrithum. All trees
will be represented via structs (see section on AST's).
PUT SOME FLOW CHARTS HERE
diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ps b/comp/lucas-standen-NEA/writeup/coverpage.ps
index 049b9a3..3ca9e13 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: Thu Jun 20 12:51:08 2024
+%%CreationDate: Thu Jul 4 09:06:34 2024
%%DocumentNeededResources: font Times-Bold
%%+ font Times-Italic
%%+ font Times-Roman
@@ -275,390 +275,391 @@ def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 12/Times-Bold@0 SF(The solution)274.158 123 Q 2.208 -1.104(To b)
-275.214 153 T(ad code)1.104 E/F1 10/Times-Italic@0 SF(Lucas Standen)
-276.695 189 Q/F2 10/Times-Roman@0 SF(7949)296 207 Q F1(ABSTRA)282.535
-255 Q(CT)-.3 E/F3 10/Times-Bold@0 SF 2.5(1. Reading)111 279 R
-(this document)2.5 E F2(This document is writen in rof)111 294.6 Q 2.5
-(fa)-.25 G(nd can be found online at:)-2.5 E(https://github)111 318.6 Q
+/F0 12/Times-Bold@0 SF(The solution T)241.872 123 Q 3(ob)-1.104 G
+(ad code)-3 E/F1 10/Times-Italic@0 SF(Lucas Standen)276.695 159 Q/F2 10
+/Times-Roman@0 SF(7949)296 177 Q F1(ABSTRA)282.535 213 Q(CT)-.3 E/F3 10
+/Times-Bold@0 SF 2.5(1. Reading)111 237 R(this document)2.5 E F2
+(This document is writen in rof)111 252.6 Q 2.5(fa)-.25 G
+(nd can be found online at:)-2.5 E(https://github)111 276.6 Q
(.com/standenbo)-.4 E
(y/school/tree/master/comp/lucas-standen-NEA/writeup)-.1 E .714
-(It is using the ms macro of trof)111 342.6 R .714
+(It is using the ms macro of trof)111 300.6 R .714
(f. It can be compiled using the Mak)-.25 F .713(e\214le, or mak)-.1 F
.713(e.sh. A table of)-.1 F .454(contents has been generated using pdft\
-ocgen, it is embedded into the pdf, most pdf readers ha)111 354.6 R -.15
-(ve)-.2 G 2.5(ab)111 366.6 S(utton to open it \(\214refox has it in the\
+ocgen, it is embedded into the pdf, most pdf readers ha)111 312.6 R -.15
+(ve)-.2 G 2.5(ab)111 324.6 S(utton to open it \(\214refox has it in the\
top left, in zathura press tab to vie)-2.7 E 2.5(wi)-.25 G(t\).)-2.5 E
-2.537(An)111 390.6 S .037(ote on formating of the rof)-2.537 F .037
-(f, the te)-.25 F .036
-(xt is limited to 100 characters per line and is writen in plain)-.15 F
-1.111(ascii, no utf8 emojis and the lik)111 402.6 R 1.112
+2.787(An)111 348.6 S .287(ote on formating of the rof)-2.787 F .287
+(f, the te)-.25 F .286
+(xt is limited to 80 characters per line and is writen in plain)-.15 F
+1.111(ascii, no utf8 emojis and the lik)111 360.6 R 1.112
(e. Code snippets are left in plain te)-.1 F 1.112
-(xt, while full \214les are con-)-.15 F -.15(ve)111 414.6 S .602
+(xt, while full \214les are con-)-.15 F -.15(ve)111 372.6 S .602
(rted to a ps \214le via https://carbon.no).15 F -.65(w.)-.25 G .602
(sh/ the).65 F 3.102(ys)-.15 G .601(hould be 150mm ^ 2 \(as ps is a v)
--3.102 F .601(ector format)-.15 F 1.013(this w)111 426.6 R 1.013(ont lo)
+-3.102 F .601(ector format)-.15 F 1.013(this w)111 384.6 R 1.013(ont lo)
-.1 F 1.013(wer quality)-.25 F 3.513(,y)-.65 G 1.013
(ou might need to zoom in though\) and then ha)-3.513 F 1.313 -.15(ve t)
--.2 H 1.014(here source link).15 F(ed)-.1 E(abo)111 438.6 Q .3 -.15
+-.2 H 1.014(here source link).15 F(ed)-.1 E(abo)111 396.6 Q .3 -.15
(ve t)-.15 H(hem; assuming the).15 E 2.5(ya)-.15 G
(re from a \214le and not a small e)-2.5 E(xample.)-.15 E F3 2.5
-(2. Analysis)111 474.6 R 2.5(2.1. The)111 498.6 R(curr)2.5 E(ent pr)-.18
-E(oblem)-.18 E F2 -.15(Fo)111 514.2 S 2.546(rg).15 G .045
+(2. Analysis)111 432.6 R 2.5(2.1. The)111 456.6 R(curr)2.5 E(ent pr)-.18
+E(oblem)-.18 E F2 -.15(Fo)111 472.2 S 2.546(rg).15 G .045
(eneral small and simple projects, I write in C. Ho)-2.546 F(we)-.25 E
-.15(ve)-.25 G 2.545(rt).15 G .045(his leads to hours of deb)-2.545 F
-.045(ugging due)-.2 F .088(to se)111 526.2 R(gf)-.15 E .088(aults, and \
+.045(ugging due)-.2 F .088(to se)111 484.2 R(gf)-.15 E .088(aults, and \
memory leaks. Due to the languages manual memory management the program\
--)-.1 F .565(mer is required to kno)111 538.2 R 3.065(ws)-.25 G 3.065
+-)-.1 F .565(mer is required to kno)111 496.2 R 3.065(ws)-.25 G 3.065
(om)-3.065 G .564(uch information about the hardw)-3.065 F .564(are the)
-.1 F 3.064(yw)-.15 G .564(rite for)-3.064 F 3.064(,a)-.4 G .564
-(nd the second)-3.064 F(an)111 550.2 Q(ything goes wrong, it is v)-.15 E
+(nd the second)-3.064 F(an)111 508.2 Q(ything goes wrong, it is v)-.15 E
(ague on ho)-.25 E 2.5(wt)-.25 G 2.5<6f8c>-2.5 G 2.5(xt)-2.5 G(hings.)
--2.5 E F3 2.5(In)111 574.2 S(eed a language that stops me fr)-2.5 E
-(om shooting myself in the f)-.18 E(oot)-.25 E F2 2.584(Ch)111 598.2 S
+-2.5 E F3 2.5(In)111 532.2 S(eed a language that stops me fr)-2.5 E
+(om shooting myself in the f)-.18 E(oot)-.25 E F2 2.584(Ch)111 556.2 S
.084(as been standard for man)-2.584 F 2.584(yd)-.15 G .084(ecades no)
-2.584 F 2.584(wa)-.25 G .084(nd its age is sho)-2.584 F .084
(wing, it lacks man)-.25 F 2.585(ym)-.15 G .085(odern features)-2.585 F
-(lik)111 610.2 Q 2.605(eO)-.1 G(OP)-2.605 E 2.605(,o)-1.11 G 2.605(rh)
+(lik)111 568.2 Q 2.605(eO)-.1 G(OP)-2.605 E 2.605(,o)-1.11 G 2.605(rh)
-2.605 G .105(igher le)-2.605 F -.15(ve)-.25 G 2.605(lf).15 G .105
(unctional abstractions, that ha)-2.605 F .405 -.15(ve b)-.2 H .105
(ecome common in modern years due).15 F 1.303
-(to there helpfulness. This is not to f)111 622.2 R 1.303(ault C')-.1 F
+(to there helpfulness. This is not to f)111 580.2 R 1.303(ault C')-.1 F
3.803(sa)-.55 G(chie)-3.803 E -.15(ve)-.25 G 1.303(ments either).15 F
3.804(,t)-.4 G 1.304(he language is my personal)-3.804 F .66
-(choice for most projects for a reason, it')111 634.2 R 3.159(sf)-.55 G
+(choice for most projects for a reason, it')111 592.2 R 3.159(sf)-.55 G
.659(ast and po)-3.259 F .659(werful; an)-.25 F 3.159(ys)-.15 G .659
(olution I mak)-3.159 F 3.159(es)-.1 G .659(hould not cut)-3.159 F
-(that a)111 646.2 Q -.1(wa)-.15 G -.65(y.).1 G F3 2.5(2.2. A)111 682.2 R
-(solution)2.5 E/F4 10/Times-BoldItalic@0 SF(Zippy LANG)111.61 697.8 Q F2
-3.378(An)111 721.8 S -.15(ex)-3.378 G 3.378(tg).15 G .878
+(that a)111 604.2 Q -.1(wa)-.15 G -.65(y.).1 G F3 2.5(2.2. A)111 640.2 R
+(solution)2.5 E/F4 10/Times-BoldItalic@0 SF(Zippy LANG)111.61 655.8 Q F2
+3.378(An)111 679.8 S -.15(ex)-3.378 G 3.378(tg).15 G .878
(eneration language, for general use. Designed for k)-3.378 F .879
-(eeping code simple, neat and read-)-.1 F 0 Cg EP
+(eeping code simple, neat and read-)-.1 F 3.307(able. It)111 691.8 R
+.807(will be similar to functional languages, kno)3.307 F .807
+(wn for there strict ability to k)-.25 F .806(eep code safe)-.1 F .223
+(and practical. The language should be interpreted lik)111 703.8 R 2.724
+(ep)-.1 G .224(ython, perl and lisp, to allo)-2.824 F 2.724(wf)-.25 G
+.224(or easy de-)-2.724 F -.2(bu)111 715.8 S(gging tools.).2 E 0 Cg EP
%%Page: 2 2
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-2-)300.17 48 Q 3.307(able. It)111 84 R .807
-(will be similar to functional languages, kno)3.307 F .807
-(wn for there strict ability to k)-.25 F .806(eep code safe)-.1 F .223
-(and practical. The language should be interpreted lik)111 96 R 2.724
-(ep)-.1 G .224(ython, perl and lisp, to allo)-2.824 F 2.724(wf)-.25 G
-.224(or easy de-)-2.724 F -.2(bu)111 108 S(gging tools.).2 E
-(The goal of Zipp)111 132 Q 2.5(yi)-.1 G 2.5(st)-2.5 G 2.5(om)-2.5 G(ak)
--2.5 E 2.5(ec)-.1 G(odding easier)-2.5 E 2.5(,w)-.4 G(hile remaining f)
--2.5 E(ast, with a interpreter writen in C.)-.1 E/F1 10/Times-Bold@0 SF
-2.5(2.3. What)111 168 R(is a pr)2.5 E(ogramming language)-.18 E 2.5
-(2.3.1. A)111 192 R -.1(ve)2.5 G(ry simple explanation).1 E F0 .247
-(At its lo)111 207.6 R .247
+/F0 10/Times-Roman@0 SF(-2-)300.17 48 Q(The goal of Zipp)111 84 Q 2.5
+(yi)-.1 G 2.5(st)-2.5 G 2.5(om)-2.5 G(ak)-2.5 E 2.5(ec)-.1 G
+(odding easier)-2.5 E 2.5(,w)-.4 G(hile remaining f)-2.5 E
+(ast, with a interpreter writen in C.)-.1 E/F1 10/Times-Bold@0 SF 2.5
+(2.3. What)111 120 R(is a pr)2.5 E(ogramming language)-.18 E 2.5
+(2.3.1. A)111 144 R -.1(ve)2.5 G(ry simple explanation).1 E F0 .247
+(At its lo)111 159.6 R .247
(west de\214nition a PL is a set of speci\214c w)-.25 F .247
(ords, that when gi)-.1 F -.15(ve)-.25 G 2.747(nt).15 G 2.747(oac)-2.747
-G .247(omputer in the right)-2.747 F 1.108(order ha)111 219.6 R 1.408
+G .247(omputer in the right)-2.747 F 1.108(order ha)111 171.6 R 1.408
-.15(ve a r)-.2 H 1.108(eproducible beha).15 F(viour)-.2 E 3.609(.Am)
-.55 G 1.109(ore human w)-3.609 F 1.109(ay of saying that, w)-.1 F 1.109
(ould be its ho)-.1 F 3.609(ww)-.25 G(e)-3.609 E(control computers.)111
-231.6 Q F1 2.5(2.3.2. Wh)111 255.6 R 2.5(ya)-.15 G .36 -.18(re t)-2.5 H
+183.6 Q F1 2.5(2.3.2. Wh)111 207.6 R 2.5(ya)-.15 G .36 -.18(re t)-2.5 H
(her).18 E 2.5(es)-.18 G 2.5(om)-2.5 G(any)-2.5 E F0 .211
(When someone is looking at code it can often be seen as just that, ho)
-111 271.2 R(we)-.25 E -.15(ve)-.25 G 2.71(rt).15 G .21
-(here are hundreds of)-2.71 F .557(languages that all tak)111 283.2 R
+111 223.2 R(we)-.25 E -.15(ve)-.25 G 2.71(rt).15 G .21
+(here are hundreds of)-2.71 F .557(languages that all tak)111 235.2 R
3.057(et)-.1 G .557(he idea of "code" in v)-3.057 F .558(ery dif)-.15 F
.558(ferent w)-.25 F .558(ays. Some are designed for speci\214c)-.1 F
-(hardw)111 295.2 Q .87(are, some are designed for making general use pr\
-ograms while others are highly special-)-.1 F 2.695(ized. It)111 307.2 R
+(hardw)111 247.2 Q .87(are, some are designed for making general use pr\
+ograms while others are highly special-)-.1 F 2.695(ized. It)111 259.2 R
.196(is important to see "code", as more than just one o)2.695 F -.15
(ve)-.15 G .196(rarching term and instead see where).15 F
-(the code is being used, and e)111 319.2 Q -.25(va)-.25 G
-(luate it from that.).25 E F1 2.5(2.4. Resear)111 367.2 R
+(the code is being used, and e)111 271.2 Q -.25(va)-.25 G
+(luate it from that.).25 E F1 2.5(2.4. Resear)111 319.2 R
(ching, and getting a scope of the pr)-.18 E(oject)-.18 E F0 .264
-(Before I start to design a language i should \214rst \214nd e)111 382.8
+(Before I start to design a language i should \214rst \214nd e)111 334.8
R .263(xamples of others and \214nd what i w)-.15 F .263(ant my)-.1 F
-(language to be lik)111 394.8 Q(e.)-.1 E(I')111 418.8 Q 3.658(dl)-.5 G
+(language to be lik)111 346.8 Q(e.)-.1 E(I')111 370.8 Q 3.658(dl)-.5 G
(ik)-3.658 E 3.658(em)-.1 G 3.658(yl)-3.658 G 1.158
(anguage to feel modern so i should tak)-3.658 F 3.658(ei)-.1 G 1.158
(nspiration from what other modern lan-)-3.658 F .068(guages do, ho)111
-430.8 R(we)-.25 E -.15(ve)-.25 G 2.568(ro).15 G 2.568(nt)-2.568 G .068
+382.8 R(we)-.25 E -.15(ve)-.25 G 2.568(ro).15 G 2.568(nt)-2.568 G .068
(he back)-2.568 F .068(ed i w)-.1 F .068
(ant my language to be stable and f)-.1 F .068
-(ast, for that i should look)-.1 F(at older projects.)111 442.8 Q F1 2.5
-(2.4.1. Examples)111 478.8 R(of older similar pr)2.5 E(ojects, that ar)
+(ast, for that i should look)-.1 F(at older projects.)111 394.8 Q F1 2.5
+(2.4.1. Examples)111 430.8 R(of older similar pr)2.5 E(ojects, that ar)
-.18 E 2.5(eag)-.18 G(ood base f)-2.5 E(or my language)-.25 E 2.5
-(2.4.1.1. Python)111 502.8 R F0 .534(Python is a high le)111 518.4 R
+(2.4.1.1. Python)111 454.8 R F0 .534(Python is a high le)111 470.4 R
-.15(ve)-.25 G 3.034(lO).15 G .534(OP language that w)-3.034 F .534
(as designed in 1991. It w)-.1 F .534(as made to mak)-.1 F 3.035(ep)-.1
G(rogram-)-3.035 E .644
-(ming easy while still being able to use some of C')111 530.4 R 3.144
+(ming easy while still being able to use some of C')111 482.4 R 3.144
(sf)-.55 G .643(unctions. Although it has become standard)-3.144 F
-(for man)111 542.4 Q 2.5(yu)-.15 G(se cases, it is slo)-2.5 E 2.5(wa)
+(for man)111 494.4 Q 2.5(yu)-.15 G(se cases, it is slo)-2.5 E 2.5(wa)
-.25 G(nd inef)-2.5 E(\214cient, and v)-.25 E(ery bloated.)-.15 E
-(https://www)111 566.4 Q(.p)-.65 E(ython.or)-.1 E(g/)-.18 E(Zipp)111
-590.4 Q 3.395(ys)-.1 G .895(hould tak)-3.395 F 3.395(ep)-.1 G .895
+(https://www)111 518.4 Q(.p)-.65 E(ython.or)-.1 E(g/)-.18 E(Zipp)111
+542.4 Q 3.395(ys)-.1 G .895(hould tak)-3.395 F 3.395(ep)-.1 G .895
(ythons high le)-3.495 F -.15(ve)-.25 G 3.395(la).15 G .895
(bstractions, as the)-3.395 F 3.395(ym)-.15 G(ak)-3.395 E 3.395(ep)-.1 G
.895(rogramming v)-3.395 F .895(ery easy and it)-.15 F
-(should try and tak)111 602.4 Q 2.5(en)-.1 G
+(should try and tak)111 554.4 Q 2.5(en)-.1 G
(otes from its libraries as the)-2.5 E 2.5(ya)-.15 G
(re mostly well written, and well documented.)-2.5 E F1 2.5
-(2.4.1.2. Lisp)111 626.4 R F0 .976(Lisp is the second e)111 642 R -.15
+(2.4.1.2. Lisp)111 578.4 R F0 .976(Lisp is the second e)111 594 R -.15
(ve)-.25 G 3.476(rp).15 G .976(rogramming language, de)-3.476 F -.15(ve)
-.25 G .976(loped at MiT).15 F 3.476(,i)-.74 G 3.476(ti)-3.476 G 3.476
(st)-3.476 G .976(he \214rst functional lan-)-3.476 F .843
-(guage, creating man)111 654 R 3.343(yc)-.15 G .843(ommon features lik)
+(guage, creating man)111 606 R 3.343(yc)-.15 G .843(ommon features lik)
-3.343 F 3.343(eh)-.1 G .844(igher order functions, recursion, and g)
-3.343 F .844(arbage col-)-.05 F .5
-(lection. It is generally not used an)111 666 R 2.999(ym)-.15 G .499
+(lection. It is generally not used an)111 618 R 2.999(ym)-.15 G .499
(ore as it feels old compared to other functional languages,)-2.999 F
-(lik)111 678 Q 2.5(eO)-.1 G(caml or Hask)-2.5 E(ell.)-.1 E
-(https://lisp-lang.or)111 702 Q(g/)-.18 E(Zipp)111 726 Q 3.392(ys)-.1 G
+(lik)111 630 Q 2.5(eO)-.1 G(caml or Hask)-2.5 E(ell.)-.1 E
+(https://lisp-lang.or)111 654 Q(g/)-.18 E(Zipp)111 678 Q 3.392(ys)-.1 G
.892(hould try to tak)-3.392 F 3.392(ea)-.1 G .892
(lot from the syntax of lisp, \(\) mak)-3.392 F 3.393(ei)-.1 G 3.393(te)
--3.393 G .893(asy to see what parts of code)-3.393 F 0 Cg EP
+-3.393 G .893(asy to see what parts of code)-3.393 F(will ef)111 690 Q
+(fect what, and mak)-.25 E 2.5(et)-.1 G(hings easy to parse.)-2.5 E F1
+2.5(2.4.1.3. P)111 714 R(erl)-.2 E F0 .607(Perl is scripting language d\
+esigned for use in linux, when bash is too slo)111 729.6 R 1.907 -.65
+(w, o)-.25 H 3.107(rn).65 G .607(ot suited for the)-3.107 F 0 Cg EP
%%Page: 3 3
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-3-)300.17 48 Q(will ef)111 84 Q
-(fect what, and mak)-.25 E 2.5(et)-.1 G(hings easy to parse.)-2.5 E/F1
-10/Times-Bold@0 SF 2.5(2.4.1.3. P)111 108 R(erl)-.2 E F0 .607(Perl is s\
-cripting language designed for use in linux, when bash is too slo)111
-123.6 R 1.907 -.65(w, o)-.25 H 3.107(rn).65 G .607(ot suited for the)
--3.107 F(job)111 135.6 Q 3.413(.P)-.4 G .913
+/F0 10/Times-Roman@0 SF(-3-)300.17 48 Q(job)111 84 Q 3.413(.P)-.4 G .913
(erl is often described as the glue of the uni)-3.413 F -.15(ve)-.25 G
.914(rse \(see xkcd https://3d.xkcd.com/224/\).).15 F(Its)5.914 E
-(syntax is quite strange ho)111 147.6 Q(we)-.25 E -.15(ve)-.25 G 2.5(ra)
-.15 G(nd it is slo)-2.5 E 1.3 -.65(w. M)-.25 H
-(aking it poorly suited to).65 E -.1(wa)-.25 G(rds general use.).1 E
-(https://www)111 171.6 Q(.perl.or)-.65 E(g/)-.18 E(Zipp)111 195.6 Q
-3.083(ys)-.1 G .583(hould tak)-3.083 F 3.083(ef)-.1 G .583(rom perls mi\
-nimalism, it is a small language that is of a similar size to bash)
--3.083 F .302(or zsh, while feeling closer to p)111 207.6 R .302
-(ython. If Zipp)-.1 F 2.802(yc)-.1 G .302(an achie)-2.802 F .602 -.15
-(ve a s)-.25 H .302(imilar small size, while remaining).15 F(po)111
-219.6 Q(werful I will be happ)-.25 E -.65(y.)-.1 G F1 2.5
-(2.4.2. Examples)111 255.6 R(of new similar pr)2.5 E(ojects that ar)-.18
-E 2.5(ea)-.18 G(lso a good base)-2.5 E 2.5(2.4.2.1. Gleam)111 279.6 R F0
+(syntax is quite strange ho)111 96 Q(we)-.25 E -.15(ve)-.25 G 2.5(ra).15
+G(nd it is slo)-2.5 E 1.3 -.65(w. M)-.25 H(aking it poorly suited to).65
+E -.1(wa)-.25 G(rds general use.).1 E(https://www)111 120 Q(.perl.or)
+-.65 E(g/)-.18 E(Zipp)111 144 Q 3.083(ys)-.1 G .583(hould tak)-3.083 F
+3.083(ef)-.1 G .583(rom perls minimalism, it is a small language that i\
+s of a similar size to bash)-3.083 F .302
+(or zsh, while feeling closer to p)111 156 R .302(ython. If Zipp)-.1 F
+2.802(yc)-.1 G .302(an achie)-2.802 F .602 -.15(ve a s)-.25 H .302
+(imilar small size, while remaining).15 F(po)111 168 Q
+(werful I will be happ)-.25 E -.65(y.)-.1 G/F1 10/Times-Bold@0 SF 2.5
+(2.4.2. Examples)111 204 R(of new similar pr)2.5 E(ojects that ar)-.18 E
+2.5(ea)-.18 G(lso a good base)-2.5 E 2.5(2.4.2.1. Gleam)111 228 R F0
.052(Gleam is a modern language releasing in the past 5 years. It is hi\
-ghly functional, with no mutable)111 295.2 R .432(data, no traditional \
+ghly functional, with no mutable)111 243.6 R .432(data, no traditional \
loops. Instead recursion can be used to replace alot of these features.)
-111 307.2 R(Gleam)5.432 E .454
-(compiles to erlang/Beam bytecode, much lik)111 319.2 R 2.954(ej)-.1 G
+111 255.6 R(Gleam)5.432 E .454
+(compiles to erlang/Beam bytecode, much lik)111 267.6 R 2.954(ej)-.1 G
-.2(av)-2.954 G 2.954(at)-.05 G 2.954(ot)-2.954 G .454
(he jvm, and doing this has made Gleam a)-2.954 F
(highly scalable language with good library support out the box.)111
-331.2 Q(https://gleam.run/)111 355.2 Q(Zipp)111 379.2 Q 2.89(ys)-.1 G
+279.6 Q(https://gleam.run/)111 303.6 Q(Zipp)111 327.6 Q 2.89(ys)-.1 G
.39(hould tak)-2.89 F 2.89(ef)-.1 G .391
(rom the functional elements of Gleam, as the)-2.89 F 2.891(yk)-.15 G
.391(eep programs safer)-2.991 F 2.891(,h)-.4 G -.25(ow)-2.891 G -2.15
--.25(ev e).25 H(r).25 E(Zipp)111 391.2 Q 2.5(ys)-.1 G(hould not remo)
+-.25(ev e).25 H(r).25 E(Zipp)111 339.6 Q 2.5(ys)-.1 G(hould not remo)
-2.5 E .3 -.15(ve a)-.15 H(ll procedural elements, as for loops are v)
-.15 E(ery helpful)-.15 E F1 2.5(2.4.2.2. Hask)111 415.2 R(ell)-.1 E F0
-(Hask)111 430.8 Q .913(ell is another modern functional language kno)-.1
+.15 E(ery helpful)-.15 E F1 2.5(2.4.2.2. Hask)111 363.6 R(ell)-.1 E F0
+(Hask)111 379.2 Q .913(ell is another modern functional language kno)-.1
F .912(wn for being v)-.25 F .912(ery complicated, ho)-.15 F(we)-.25 E
--.15(ve)-.25 G 3.412(ri).15 G(n-)-3.412 E(credibly po)111 442.8 Q
+-.15(ve)-.25 G 3.412(ri).15 G(n-)-3.412 E(credibly po)111 391.2 Q
(werful. Its syntax feels v)-.25 E
-(ery mathematical, and incredibly terse.)-.15 E(https://www)111 466.8 Q
-(.hask)-.65 E(ell.or)-.1 E(g/)-.18 E .224(Perhaps Zipp)111 490.8 R 2.724
+(ery mathematical, and incredibly terse.)-.15 E(https://www)111 415.2 Q
+(.hask)-.65 E(ell.or)-.1 E(g/)-.18 E .224(Perhaps Zipp)111 439.2 R 2.724
(yc)-.1 G .224(ould learn from Hask)-2.724 F .225(ell, as it pro)-.1 F
.225(vides functional and procedural elements, mak-)-.15 F
-(ing it a well rounded language)111 502.8 Q F1 2.5(2.4.2.3. Har)111
-526.8 R(e)-.18 E F0 .701(Hare w)111 542.4 R .701(as designed to be a 10\
+(ing it a well rounded language)111 451.2 Q F1 2.5(2.4.2.3. Har)111
+475.2 R(e)-.18 E F0 .701(Hare w)111 490.8 R .701(as designed to be a 10\
0 year language, and thus stability is its main goal, it is not set to)
--.1 F(ha)111 554.4 Q .489 -.15(ve a s)-.2 H .189(yntax change an).15 F
+-.1 F(ha)111 502.8 Q .489 -.15(ve a s)-.2 H .189(yntax change an).15 F
2.689(yt)-.15 G .189
(ime soon, and it has strong emphasis on memory safety)-2.689 F 2.69(.I)
-.65 G 2.69<748c>-2.69 G .19(ts into the)-2.69 F
(same part of the tech stack as C, and thus it can be used for some v)
-111 566.4 Q(ery lo)-.15 E 2.5(wl)-.25 G -2.15 -.25(ev e)-2.5 H 2.5(lw)
-.25 G(ork.)-2.6 E(https://harelang.or)111 590.4 Q(g/)-.18 E 3.174(It)111
-614.4 S .674(hink Zipp)-3.174 F 3.174(ys)-.1 G .674(hould ha)-3.174 F
+111 514.8 Q(ery lo)-.15 E 2.5(wl)-.25 G -2.15 -.25(ev e)-2.5 H 2.5(lw)
+.25 G(ork.)-2.6 E(https://harelang.or)111 538.8 Q(g/)-.18 E 3.174(It)111
+562.8 S .674(hink Zipp)-3.174 F 3.174(ys)-.1 G .674(hould ha)-3.174 F
.974 -.15(ve a s)-.2 H .674(trong emphasis on stability).15 F 3.173(,m)
-.65 G .673(uch lik)-3.173 F 3.173(eH)-.1 G .673(are, to man)-3.173 F
-3.173(yt)-.15 G .673(imes ha)-3.173 F .973 -.15(ve I)-.2 H(se)111 626.4
+3.173(yt)-.15 G .673(imes ha)-3.173 F .973 -.15(ve I)-.2 H(se)111 574.8
Q(gf)-.15 E .175(aulted due to a tin)-.1 F 2.675(ym)-.15 G(istak)-2.675
E .175(e. Zipp)-.1 F 2.675(ys)-.1 G .176(hould also look to Hare')-2.675
F 2.676(ss)-.55 G .176(mall size, you can b)-2.676 F .176(uy a cop)-.2 F
-(y)-.1 E(of Hare on a)111 638.4 Q F1(SINGLE 3 1/2')111 662.4 Q 2.5('F)
+(y)-.1 E(of Hare on a)111 586.8 Q F1(SINGLE 3 1/2')111 610.8 Q 2.5('F)
-.63 G(LOLPY)-2.5 E F0(This is something I too should try to achie)111
-690 Q -.15(ve)-.25 G(.).15 E F1 2.5(2.4.3. What)111 726 R(should be tak)
-2.5 E(en away fr)-.1 E(om these languages?)-.18 E 0 Cg EP
+638.4 Q -.15(ve)-.25 G(.).15 E F1 2.5(2.4.3. What)111 674.4 R
+(should be tak)2.5 E(en away fr)-.1 E(om these languages?)-.18 E F0
+2.722(Iw)111 690 S .222(as already leaning to)-2.822 F -.1(wa)-.25 G
+.221(rds functional programming when I started this project ho).1 F(we)
+-.25 E -.15(ve)-.25 G 2.721(rn).15 G .721 -.25(ow I)-2.721 H(belie)111
+702 Q .993 -.15(ve i)-.25 H(t').15 E 3.193(st)-.55 G .693
+(he only option for producing safe applications. Zipp)-3.193 F 3.194(yw)
+-.1 G .694(ill be a functional language)-3.194 F
+(with a strong emphasis on recursion.)111 714 Q 0 Cg EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-4-)300.17 48 Q 2.722(Iw)111 84 S .222
-(as already leaning to)-2.822 F -.1(wa)-.25 G .221
-(rds functional programming when I started this project ho).1 F(we)-.25
-E -.15(ve)-.25 G 2.721(rn).15 G .721 -.25(ow I)-2.721 H(belie)111 96 Q
-.993 -.15(ve i)-.25 H(t').15 E 3.193(st)-.55 G .693
-(he only option for producing safe applications. Zipp)-3.193 F 3.194(yw)
--.1 G .694(ill be a functional language)-3.194 F
-(with a strong emphasis on recursion.)111 108 Q 2.862(Ia)111 132 S .362
+/F0 10/Times-Roman@0 SF(-4-)300.17 48 Q 2.862(Ia)111 84 S .362
(lso belie)-2.862 F .661 -.15(ve t)-.25 H .361(hat I should tak).15 F
2.861(es)-.1 G .361
(ize of the interpreter into account, as this is important for k)-2.861
-F(eep-)-.1 E(ing the project manageable and consistent.)111 144 Q .916(\
-And \214nally I think that syntax should be inspired by Lisp, although \
-Lisp itself can be a messy)111 168 R .198
+F(eep-)-.1 E(ing the project manageable and consistent.)111 96 Q .916(A\
+nd \214nally I think that syntax should be inspired by Lisp, although L\
+isp itself can be a messy)111 120 R .198
(language, with the right changes I am con\214dent that I can mak)111
-180 R 2.697(eaa)-.1 G(ttracti)-2.697 E .497 -.15(ve l)-.25 H .197
-(anguage for the 21st).15 F(century)111 192 Q(.)-.65 E/F1 10
-/Times-Bold@0 SF 2.5(2.5. Clients)111 228 R F0 .056
-(In a project of this nature, the Client is e)111 243.6 R -.15(ve)-.25 G
+132 R 2.697(eaa)-.1 G(ttracti)-2.697 E .497 -.15(ve l)-.25 H .197
+(anguage for the 21st).15 F(century)111 144 Q(.)-.65 E/F1 10
+/Times-Bold@0 SF 2.5(2.5. Clients)111 180 R F0 .056
+(In a project of this nature, the Client is e)111 195.6 R -.15(ve)-.25 G
.057(ry programmer ali).15 F -.15(ve)-.25 G 2.557(;w).15 G .057
(hich is a pretty lar)-2.557 F .057(ge scope.)-.18 F -.8(To)5.057 G
-(narro)111 255.6 Q 2.949(wt)-.25 G .449(his do)-2.949 F .449
+(narro)111 207.6 Q 2.949(wt)-.25 G .449(his do)-2.949 F .449
(wn as much as possible, I will intervie)-.25 F 2.949(was)-.25 G .448
(mall handful of people throughout the)-2.949 F(project, of dif)111
-267.6 Q(ferent skill le)-.25 E -.15(ve)-.25 G(ls.).15 E F1 2.5
-(2.5.1. Client)111 303.6 R(1, Amy C)2.5 E F0 1.032(My \214rst client is\
+219.6 Q(ferent skill le)-.25 E -.15(ve)-.25 G(ls.).15 E F1 2.5
+(2.5.1. Client)111 255.6 R(1, Amy C)2.5 E F0 1.032(My \214rst client is\
a friend of mine, Amy C, she is a con\214dent programmer who has compl\
-eted)111 319.2 R(man)111 331.2 Q 2.865(yc)-.15 G .365
+eted)111 271.2 R(man)111 283.2 Q 2.865(yc)-.15 G .365
(omplicated projects. I am choosing her as a client as she can gi)-2.865
F .664 -.15(ve m)-.25 H 2.864(et).15 G .364(echnical feed back)-2.864 F
-(on my project and its function/utility)111 343.2 Q(.)-.65 E F1 2.5
-(2.5.2. Client)111 367.2 R(2, Rayn M)2.5 E F0 .16
-(Another friend of mine, Rayn M, is a technical computer user)111 382.8
+(on my project and its function/utility)111 295.2 Q(.)-.65 E F1 2.5
+(2.5.2. Client)111 319.2 R(2, Rayn M)2.5 E F0 .16
+(Another friend of mine, Rayn M, is a technical computer user)111 334.8
R 2.661(,h)-.4 G -.25(ow)-2.661 G -2.15 -.25(ev e).25 H 2.661(rh).25 G
2.661(ed)-2.661 G .161(oes not kno)-2.661 F 2.661(wh)-.25 G .661 -.25
-(ow t)-2.661 H(o).25 E .59(program at a high le)111 394.8 R -.15(ve)-.25
+(ow t)-2.661 H(o).25 E .59(program at a high le)111 346.8 R -.15(ve)-.25
G .59(l. He will be a good client as he can sho).15 F 3.089(wm)-.25 G
3.089(eh)-3.089 G 1.089 -.25(ow m)-3.089 H 3.089(yl).25 G .589
-(anguage looks to)-3.089 F 1.233(some one who doesn')111 406.8 R 3.733
+(anguage looks to)-3.089 F 1.233(some one who doesn')111 358.8 R 3.733
(tu)-.18 G 1.233(nderstand the inside w)-3.733 F 1.234
-(orkings, helping me design the structure of the)-.1 F(code.)111 418.8 Q
-F1 2.5(2.5.3. Client)111 442.8 R(3, a normie)2.5 E F0(some stuf)111
-458.4 Q 2.5(fa)-.25 G(bout ho)-2.5 E 2.5(wt)-.25 G
+(orkings, helping me design the structure of the)-.1 F(code.)111 370.8 Q
+F1 2.5(2.5.3. Client)111 394.8 R(3, a normie)2.5 E F0(some stuf)111
+410.4 Q 2.5(fa)-.25 G(bout ho)-2.5 E 2.5(wt)-.25 G
(he normie \214nds the completed project.)-2.5 E F1 2.5(2.5.4. Client)
-111 482.4 R(4, myself)2.5 E F0(I')111 498 Q .587 -.15(ve w)-.5 H .287
+111 434.4 R(4, myself)2.5 E F0(I')111 450 Q .587 -.15(ve w)-.5 H .287
(anted to tak).05 F 2.787(eo)-.1 G .287(ut a project lik)-2.787 F 2.786
(et)-.1 G .286
(his for a long long time, and this is the perfect opportunity)-2.786 F
-1.067(to do so, I will be assessing myself along the w)111 510 R 1.067
+1.067(to do so, I will be assessing myself along the w)111 462 R 1.067
(ay of this, b)-.1 F 1.068(uilding the project to my personal)-.2 F
-(speci\214cation.)111 522 Q F1 2.5(2.6. Questionnair)111 558 R(es)-.18 E
+(speci\214cation.)111 474 Q F1 2.5(2.6. Questionnair)111 510 R(es)-.18 E
F0 .565(It is important to get feedback from end users, so I will tak)
-111 573.6 R 3.064(em)-.1 G .564(ultiple questionnaires throughout)-3.064
+111 525.6 R 3.064(em)-.1 G .564(ultiple questionnaires throughout)-3.064
F .399(the project. I will then use them to slightly edit the requireme\
-nts of my project this should mak)111 585.6 R(e)-.1 E
-(the \214nal outcome more helpful and what people w)111 597.6 Q(ant.)-.1
-E(In the section bello)111 621.6 Q 2.5(wy)-.25 G
+nts of my project this should mak)111 537.6 R(e)-.1 E
+(the \214nal outcome more helpful and what people w)111 549.6 Q(ant.)-.1
+E(In the section bello)111 573.6 Q 2.5(wy)-.25 G
(ou will \214nd questionnaires from the analyses stage of my project.)
--2.5 E F1 2.5(2.6.1. Questionnair)111 645.6 R 2.5(e1f)-.18 G(or Amy C)
--2.75 E/F2 10/Times-BoldItalic@0 SF([30th April 2024])111.87 669.6 Q
+-2.5 E F1 2.5(2.6.1. Questionnair)111 597.6 R 2.5(e1f)-.18 G(or Amy C)
+-2.75 E/F2 10/Times-BoldItalic@0 SF([30th April 2024])111.87 621.6 Q
(answ)3.81 E(ered by Amy)-.1 E 2.5(,s)-.37 G(ee pull request she left)
--2.5 E F1 2.5(2.6.1.1. What)111 693.6 R(do y)2.5 E
+-2.5 E F1 2.5(2.6.1.1. What)111 645.6 R(do y)2.5 E
(ou \214nd the most important in a language? \(eg: speed, r)-.25 E
-(eadability\))-.18 E F0(Speed, readability)111 709.2 Q 2.5(,d)-.65 G(eb)
+(eadability\))-.18 E F0(Speed, readability)111 661.2 Q 2.5(,d)-.65 G(eb)
-2.5 E(ugging ease and disk space ef)-.2 E(\214cienc)-.25 E -.65(y.)-.15
-G 0 Cg EP
+G F1 3.168(2.6.1.2. What)111 685.2 R .668(tools ar)3.168 F 3.168(ei)-.18
+G .668(mportant f)-3.168 F .668(or a language to ha)-.25 F -.1(ve)-.25 G
+3.167(?\().1 G .667(eg: pkg-manager)-3.167 F 3.167(,I)-.92 G .667
+(DE integra-)-3.167 F(tion\))111 697.2 Q F0 .224(IDE inte)111 712.8 R
+.224(gration \(things lik)-.15 F 2.724(et)-.1 G .224
+(ab complete and deb)-2.724 F .224(ugging tools\), a package manager)-.2
+F 2.725(,a)-.4 G .225(nd the abil-)-2.725 F
+(ity to interact with the user through the command line easily)111 724.8
+Q(.)-.65 E 0 Cg EP
%%Page: 5 5
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-5-)300.17 48 Q/F1 10/Times-Bold@0 SF 3.168
-(2.6.1.2. What)111 84 R .668(tools ar)3.168 F 3.168(ei)-.18 G .668
-(mportant f)-3.168 F .668(or a language to ha)-.25 F -.1(ve)-.25 G 3.167
-(?\().1 G .667(eg: pkg-manager)-3.167 F 3.167(,I)-.92 G .667
-(DE integra-)-3.167 F(tion\))111 96 Q F0 .224(IDE inte)111 111.6 R .224
-(gration \(things lik)-.15 F 2.724(et)-.1 G .224(ab complete and deb)
--2.724 F .224(ugging tools\), a package manager)-.2 F 2.725(,a)-.4 G
-.225(nd the abil-)-2.725 F
-(ity to interact with the user through the command line easily)111 123.6
-Q(.)-.65 E F1 3.364(2.6.1.3. What)111 147.6 R(featur)3.363 E .863
-(es do y)-.18 F .863(ou lik)-.25 F 3.363(ef)-.1 G -.18(ro)-3.363 G 3.363
-(mo).18 G .863(ther languages \(eg: C')-3.363 F 3.363(sa)-.37 G(dv)
--3.363 E .863(anced memory man-)-.1 F(agement, hask)111 159.6 Q(ell')-.1
-E 2.5(st)-.37 G(erse syntax\))-2.5 E F0 .621(The ability to pass the me\
-mory reference of an object or function and a collection of b)111 175.2
-R .621(uilt-in or)-.2 F(standard functions lik)111 187.2 Q 2.5(e")-.1 G
-(print", "split", or "sort".)-2.5 E F1 2.5(2.6.1.4. What)111 211.2 R
+/F0 10/Times-Roman@0 SF(-5-)300.17 48 Q/F1 10/Times-Bold@0 SF 3.364
+(2.6.1.3. What)111 84 R(featur)3.363 E .863(es do y)-.18 F .863(ou lik)
+-.25 F 3.363(ef)-.1 G -.18(ro)-3.363 G 3.363(mo).18 G .863
+(ther languages \(eg: C')-3.363 F 3.363(sa)-.37 G(dv)-3.363 E .863
+(anced memory man-)-.1 F(agement, hask)111 96 Q(ell')-.1 E 2.5(st)-.37 G
+(erse syntax\))-2.5 E F0 .621(The ability to pass the memory reference \
+of an object or function and a collection of b)111 111.6 R .621
+(uilt-in or)-.2 F(standard functions lik)111 123.6 Q 2.5(e")-.1 G
+(print", "split", or "sort".)-2.5 E F1 2.5(2.6.1.4. What)111 147.6 R
(do y)2.5 E(ou want to pr)-.25 E
(ogram in this language \(eg: websites, lo)-.18 E 2.5(wl)-.1 G -2.3 -.15
(ev e)-2.5 H 2.5(ls).15 G(ystems\))-2.5 E F0
-(Lightweight command line tools and web back ends.)111 226.8 Q F1 2.5
-(2.6.1.5. Do)111 250.8 R -.25(yo)2.5 G 2.5(ui).25 G
+(Lightweight command line tools and web back ends.)111 163.2 Q F1 2.5
+(2.6.1.5. Do)111 187.2 R -.25(yo)2.5 G 2.5(ui).25 G
(ntend to use graphics in the pr)-2.5 E(ograms y)-.18 E(ou write?)-.25 E
-F0(No.)111 266.4 Q F1 2.5(2.6.1.6. W)111 290.4 R(ould y)-.75 E(ou pr)
+F0(No.)111 202.8 Q F1 2.5(2.6.1.6. W)111 226.8 R(ould y)-.75 E(ou pr)
-.25 E(efer a language that f)-.18 E(ocuses on ease of use, or po)-.25 E
-(wer of the code?)-.1 E F0 2.5(Il)111 306 S(ik)-2.5 E 2.5(eag)-.1 G
-(ood balance between the tw)-2.5 E(o.)-.1 E F1 2.5(2.6.1.7. What)111 330
-R(wer)2.5 E 2.5(ey)-.18 G(our last 3 pr)-2.75 E(ojects? \(could they ha)
--.18 E .2 -.1(ve b)-.25 H(een written in Zippy?\)).1 E F0 3.854(Aw)111
-345.6 S 1.354(ebsite, a small command-line tool and a midi k)-3.854 F
--.15(ey)-.1 G 1.353(board \(program runs on a Raspberry Pi).15 F
-(Pico\).)111 357.6 Q F1 3.39(2.6.1.8. Ho)111 381.6 R 3.39(wm)-.1 G .89
-(any languages w)-3.39 F .89(ould y)-.1 F .891(ou use on a single pr)
--.25 F .891(oject? \(could Zippy be used in)-.18 F -.25(yo)111 393.6 S
-(ur codebase?\)).25 E F0 2.5(It)111 409.2 S
+(wer of the code?)-.1 E F0 2.5(Il)111 242.4 S(ik)-2.5 E 2.5(eag)-.1 G
+(ood balance between the tw)-2.5 E(o.)-.1 E F1 2.5(2.6.1.7. What)111
+266.4 R(wer)2.5 E 2.5(ey)-.18 G(our last 3 pr)-2.75 E
+(ojects? \(could they ha)-.18 E .2 -.1(ve b)-.25 H
+(een written in Zippy?\)).1 E F0 3.854(Aw)111 282 S 1.354
+(ebsite, a small command-line tool and a midi k)-3.854 F -.15(ey)-.1 G
+1.353(board \(program runs on a Raspberry Pi).15 F(Pico\).)111 294 Q F1
+3.39(2.6.1.8. Ho)111 318 R 3.39(wm)-.1 G .89(any languages w)-3.39 F .89
+(ould y)-.1 F .891(ou use on a single pr)-.25 F .891
+(oject? \(could Zippy be used in)-.18 F -.25(yo)111 330 S
+(ur codebase?\)).25 E F0 2.5(It)111 345.6 S
(ry to use as little languages in a project as possible, so lik)-2.5 E
(ely not in an e)-.1 E(xisting project.)-.15 E F1 2.5(2.6.1.9. Do)111
-433.2 R -.25(yo)2.5 G 2.5(uc).25 G(ar)-2.5 E 2.5(ef)-.18 G(or lo)-2.75 E
+369.6 R -.25(yo)2.5 G 2.5(uc).25 G(ar)-2.5 E 2.5(ef)-.18 G(or lo)-2.75 E
2.5(wl)-.1 G -2.3 -.15(ev e)-2.5 H 2.5(lc).15 G(ontr)-2.5 E(ol, or w)
-.18 E(ould y)-.1 E(ou pr)-.25 E(efer high le)-.18 E -.1(ve)-.15 G 2.5
-(la).1 G(bstractions?)-2.5 E F0 3.08(It)111 448.8 S .58(hink lo)-3.08 F
+(la).1 G(bstractions?)-2.5 E F0 3.08(It)111 385.2 S .58(hink lo)-3.08 F
(w-le)-.25 E -.15(ve)-.25 G 3.08(lc).15 G .58(ontrol is v)-3.08 F .579
(ery important, b)-.15 F .579(ut high-le)-.2 F -.15(ve)-.25 G 3.079(la)
.15 G .579(bstractions are con)-3.079 F -.15(ve)-.4 G .579
-(nient, so a good).15 F(balance between the tw)111 460.8 Q 2.5(oi)-.1 G
-2.5(sb)-2.5 G(est.)-2.5 E F1 4.18(2.6.1.10. W)111 484.8 R 1.68(ould y)
+(nient, so a good).15 F(balance between the tw)111 397.2 Q 2.5(oi)-.1 G
+2.5(sb)-2.5 G(est.)-2.5 E F1 4.18(2.6.1.10. W)111 421.2 R 1.68(ould y)
-.75 F 1.681(ou be happy to de)-.25 F -.1(ve)-.15 G 1.681
(lop libraries f).1 F 1.681(or things that ar)-.25 F 1.681(en't alr)-.18
-F 1.681(eady imple-)-.18 F(mented \(eg: an SQL library\))111 496.8 Q F0
-(Potentially if it is simple enough to implement ne)111 512.4 Q 2.5(wt)
--.25 G(hings.)-2.5 E F1 2.5(2.6.2. Notes)111 548.4 R(fr)2.5 E
-(om questionnair)-.18 E 2.5(e1)-.18 G F0 .155(Some of the k)111 564 R
+F 1.681(eady imple-)-.18 F(mented \(eg: an SQL library\))111 433.2 Q F0
+(Potentially if it is simple enough to implement ne)111 448.8 Q 2.5(wt)
+-.25 G(hings.)-2.5 E F1 2.5(2.6.2. Notes)111 484.8 R(fr)2.5 E
+(om questionnair)-.18 E 2.5(e1)-.18 G F0 .155(Some of the k)111 500.4 R
.455 -.15(ey t)-.1 H .155(hings that I'm taking a).15 F -.1(wa)-.15 G
2.655(yf).1 G .155
(rom this \214rst questionnaire, are my client/users ini-)-2.655 F .719
-(tial needs and use cases. I think it')111 576 R 3.219(sc)-.55 G .719
+(tial needs and use cases. I think it')111 512.4 R 3.219(sc)-.55 G .719
(lear my language can be of assistance to my client, Zipp)-3.219 F(y)-.1
E .698(will be a good language for web back ends and small command line\
- tools, which my client e)111 588 R(x-)-.15 E(pressed interested in.)111
-600 Q 2.563<498c>111 624 S .063(nd the f)-2.563 F .063
+ tools, which my client e)111 524.4 R(x-)-.15 E(pressed interested in.)
+111 536.4 Q 2.563<498c>111 560.4 S .063(nd the f)-2.563 F .063
(act my client is w)-.1 F .064(orried by e)-.1 F -.15(xe)-.15 G .064
(cutable size interesting, ho).15 F(we)-.25 E -.15(ve)-.25 G 2.564(rId)
.15 G .064(oubt it will be an is-)-2.564 F
-(sue; a ballooning code-base is unlik)111 636 Q
-(ely as only one person is writing the project.)-.1 E 2.56(Ia)111 660 S
-2.56(ma)-2.56 G .06(lso taking on the f)-2.56 F .06
+(sue; a ballooning code-base is unlik)111 572.4 Q
+(ely as only one person is writing the project.)-.1 E 2.56(Ia)111 596.4
+S 2.56(ma)-2.56 G .06(lso taking on the f)-2.56 F .06
(act that my client w)-.1 F .06
-(ants good command line tools, so a pkg-manager and)-.1 F -.2(bu)111 672
-S(ndler should be a priority).2 E 2.5(,p)-.65 G(erhaps the)-2.5 E 2.5
-(yc)-.15 G(ould be written in Zipp)-2.5 E 2.5(ya)-.1 G
-(fter the interpreter is done.)-2.5 E F1 2.5(2.7. The)111 708 R
+(ants good command line tools, so a pkg-manager and)-.1 F -.2(bu)111
+608.4 S(ndler should be a priority).2 E 2.5(,p)-.65 G(erhaps the)-2.5 E
+2.5(yc)-.15 G(ould be written in Zipp)-2.5 E 2.5(ya)-.1 G
+(fter the interpreter is done.)-2.5 E F1 2.5(2.7. The)111 644.4 R
(\214rst elements of the pr)2.5 E(oject)-.18 E F0(At this stage I can s\
-ay that I'm con\214dent in my project and its scope. I ha)111 723.6 Q .3
--.15(ve a g)-.2 H(oal in mind for it.).15 E 0 Cg EP
+ay that I'm con\214dent in my project and its scope. I ha)111 660 Q .3
+-.15(ve a g)-.2 H(oal in mind for it.).15 E F1(The k)111 684 Q
+(ey things to tak)-.1 E 2.5(ea)-.1 G(way fr)-2.5 E(om this section ar)
+-.18 E(e:)-.18 E(----)111 708 Q F0(Mak)2.5 E 2.5(eah)-.1 G(igh le)-2.5 E
+-.15(ve)-.25 G 2.5(ll).15 G
+(anguage with a useable set of features, to replace C in man)-2.5 E 2.5
+(ys)-.15 G(ituations.)-2.5 E 0 Cg EP
%%Page: 6 6
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-6-)300.17 48 Q/F1 10/Times-Bold@0 SF(The k)111
-84 Q(ey things to tak)-.1 E 2.5(ea)-.1 G(way fr)-2.5 E
-(om this section ar)-.18 E(e:)-.18 E(----)111 108 Q F0(Mak)2.5 E 2.5
-(eah)-.1 G(igh le)-2.5 E -.15(ve)-.25 G 2.5(ll).15 G
-(anguage with a useable set of features, to replace C in man)-2.5 E 2.5
-(ys)-.15 G(ituations.)-2.5 E F1(----)111 132 Q F0 -.25(Ke)2.5 G
-(ep the language readable and easy).25 E 2.5(,w)-.65 G(ith po)-2.5 E
-(werful tools a)-.25 E -.25(va)-.2 G(ilable.).25 E F1(----)111 156 Q F0
+/F0 10/Times-Roman@0 SF(-6-)300.17 48 Q/F1 10/Times-Bold@0 SF(----)111
+84 Q F0 -.25(Ke)2.5 G(ep the language readable and easy).25 E 2.5(,w)
+-.65 G(ith po)-2.5 E(werful tools a)-.25 E -.25(va)-.2 G(ilable.).25 E
+F1(----)111 108 Q F0
(Ensure the language is well supported with tools lik)2.5 E 2.5(eap)-.1
-G(kg-manager)-2.5 E(.)-.55 E F1 2.5(2.8. Moddeling)111 192 R F0 .044
-(In lar)111 207.6 R .044(ger projects, when a programmer needs a data s\
+G(kg-manager)-2.5 E(.)-.55 E F1 2.5(2.8. Moddeling)111 144 R F0 .044
+(In lar)111 159.6 R .044(ger projects, when a programmer needs a data s\
tructure that the language the)-.18 F 2.545(ya)-.15 G .045
-(re writing in)-2.545 F(doesn')111 219.6 Q 2.5(tp)-.18 G(ro)-2.5 E
+(re writing in)-2.545 F(doesn')111 171.6 Q 2.5(tp)-.18 G(ro)-2.5 E
(vide, the)-.15 E 2.5(yw)-.15 G(ill need to mak)-2.5 E 2.5(et)-.1 G
-(heir o)-2.5 E(wn.)-.25 E(Bello)111 243.6 Q 2.5(wa)-.25 G(re a fe)-2.5 E
+(heir o)-2.5 E(wn.)-.25 E(Bello)111 195.6 Q 2.5(wa)-.25 G(re a fe)-2.5 E
2.5(we)-.25 G(xamples of these data structures that C doesn')-2.65 E 2.5
-(ta)-.18 G(lready pro)-2.5 E(vide.)-.15 E F1 2.5(2.8.1. Link)111 267.6 R
-(ed lists)-.1 E F0 .966(this is an alternati)111 283.2 R 1.266 -.15
+(ta)-.18 G(lready pro)-2.5 E(vide.)-.15 E F1 2.5(2.8.1. Link)111 219.6 R
+(ed lists)-.1 E F0 .966(this is an alternati)111 235.2 R 1.266 -.15
(ve i)-.25 H .966
(mplementation of a list, where you store some data, and the memory ad-)
-.15 F .568(dress to the ne)111 295.2 R .568(xt node. Then you can mo)
+.15 F .568(dress to the ne)111 247.2 R .568(xt node. Then you can mo)
-.15 F .868 -.15(ve t)-.15 H .569
(hrough the list by reading the data then reading the).15 F
-(data of the ne)111 307.2 Q(xt node, and then repeating until the 'ne)
--.15 E(xt' part of the node is empty)-.15 E(.)-.65 E 2.5(Ad)111 331.2 S
+(data of the ne)111 259.2 Q(xt node, and then repeating until the 'ne)
+-.15 E(xt' part of the node is empty)-.15 E(.)-.65 E 2.5(Ad)111 283.2 S
(iagram sho)-2.5 E(wing this can be seen here:)-.25 E 14 14 109 109 -44
-44 251.5 399.2 PBEGIN
+44 251.5 351.2 PBEGIN
%%BeginDocument: linkedlist.ps
%!PS-Adobe-3.0
%%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner
@@ -1499,78 +1500,78 @@ end
%%EndDocument
end PEND 1.106
(In C this is easy to implement as you can \214nd a memory address v)111
-426.8 R 1.105(ery easily with '&' to \214nd)-.15 F .168
-(where a bit of data is stored. I will need to use a ')111 438.8 R .168
+378.8 R 1.105(ery easily with '&' to \214nd)-.15 F .168
+(where a bit of data is stored. I will need to use a ')111 390.8 R .168
(struct', which is a bit lik)-.55 F 2.669(eac)-.1 G .169(lass in C \(ho)
--2.669 F(we)-.25 E -.15(ve)-.25 G(r).15 E(you can')111 450.8 Q 2.5(ta)
+-2.669 F(we)-.25 E -.15(ve)-.25 G(r).15 E(you can')111 402.8 Q 2.5(ta)
-.18 G(ttach a function to it\). A simple implementation looks lik)-2.5
-E 2.5(et)-.1 G(his:)-2.5 E(typedef struct ll {)111 474.8 Q -.2(vo)131
-486.8 S(id *data; // the data of the node).2 E(ll *ne)131 498.8 Q
-(xt; // the ne)-.15 E(xt node)-.15 E 2.5(}l)111 522.8 S(l;)-2.5 E .623
-(The pro')111 550.4 R 3.123(so)-.55 G 3.123(fal)-3.123 G(ink)-3.123 E
+E 2.5(et)-.1 G(his:)-2.5 E(typedef struct ll {)111 426.8 Q -.2(vo)131
+438.8 S(id *data; // the data of the node).2 E(ll *ne)131 450.8 Q
+(xt; // the ne)-.15 E(xt node)-.15 E 2.5(}l)111 474.8 S(l;)-2.5 E .623
+(The pro')111 502.4 R 3.123(so)-.55 G 3.123(fal)-3.123 G(ink)-3.123 E
.623(ed list are the f)-.1 F .623(act that the)-.1 F 3.122(yc)-.15 G
.622(an ha)-3.122 F .922 -.15(ve d)-.2 H .622
(ata appended to the start or end easily).15 F
-(by changing the root node, or the ne)111 562.4 Q(xt node.)-.15 E(Link)
-111 586.4 Q 1.117(ed lists ha)-.1 F 1.417 -.15(ve a f)-.2 H 1.617 -.25
+(by changing the root node, or the ne)111 514.4 Q(xt node.)-.15 E(Link)
+111 538.4 Q 1.117(ed lists ha)-.1 F 1.417 -.15(ve a f)-.2 H 1.617 -.25
(ew d).15 H -.25(ow).25 G 1.117(nsides, for e).25 F 1.117
(xample you can')-.15 F 3.617(tm)-.18 G 1.417 -.15(ove t)-3.617 H 1.117
(hrough them backw).15 F 1.118(ards, and)-.1 F
-(unless you store it on its o)111 598.4 Q
+(unless you store it on its o)111 550.4 Q
(wn, you cant \214nd the length of it in a f)-.25 E(ast w)-.1 E(ay)-.1 E
-(.)-.65 E .476(In my project I w)111 622.4 R .476(ould lik)-.1 F 2.976
+(.)-.65 E .476(In my project I w)111 574.4 R .476(ould lik)-.1 F 2.976
(et)-.1 G 2.976(ou)-2.976 G .476(se link)-2.976 F .475
(ed list in the AST \(see later sections for info\), and to store)-.1 F
-(lists in the language.)111 634.4 Q F1 2.5(2.8.2. Dictionaries)111 658.4
-R F0 3.511(Ad)111 674 S 1.011(ictionary is a simple data structure that\
+(lists in the language.)111 586.4 Q F1 2.5(2.8.2. Dictionaries)111 610.4
+R F0 3.511(Ad)111 626 S 1.011(ictionary is a simple data structure that\
just stores, a bit of data, and a number or string to)-3.511 F
-(identify it.)111 686 Q 2.5(Ad)5 G(ictionary lik)-2.5 E 2.5(eal)-.1 G
+(identify it.)111 638 Q 2.5(Ad)5 G(ictionary lik)-2.5 E 2.5(eal)-.1 G
(ink)-2.5 E(ed list can be implemented with a struct in c lik)-.1 E 2.5
-(es)-.1 G(o:)-2.5 E(typedef struct dict {)111 710 Q -.2(vo)131 722 S
-(id *data;).2 E 0 Cg EP
+(es)-.1 G(o:)-2.5 E(typedef struct dict {)111 662 Q -.2(vo)131 674 S
+(id *data;).2 E(int id;)131 686 Q 2.5(}d)111 710 S(ict;)-2.5 E 0 Cg EP
%%Page: 7 7
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-7-)300.17 48 Q(int id;)131 84 Q 2.5(}d)111 108
-S(ict;)-2.5 E .382(In my project I think I could use a link)111 135.6 R
-.382(ed list represent a Zipp)-.1 F 2.882(yv)-.1 G .382
+/F0 10/Times-Roman@0 SF(-7-)300.17 48 Q .382
+(In my project I think I could use a link)111 84 R .382
+(ed list represent a Zipp)-.1 F 2.882(yv)-.1 G .382
(ariable and an ID that i can use)-3.132 F
-(to identify it, this could mak)111 147.6 Q 2.5(ee)-.1 G -.15(xe)-2.65 G
+(to identify it, this could mak)111 96 Q 2.5(ee)-.1 G -.15(xe)-2.65 G
(cution f).15 E(aster as i can compare ID')-.1 E 2.5(sr)-.55 G
(ather than string v)-2.5 E(alues)-.25 E/F1 10/Times-Bold@0 SF 2.5
-(2.9. Pr)111 183.6 R(ototyping hard featur)-.18 E(es)-.18 E 2.5
-(2.9.1. Abstract)111 207.6 R(Syntax T)2.5 E -.18(re)-.74 G
-(es \(AST\) theory).18 E F0 .69(In a programming language man)111 223.2
+(2.9. Pr)111 132 R(ototyping hard featur)-.18 E(es)-.18 E 2.5
+(2.9.1. Abstract)111 156 R(Syntax T)2.5 E -.18(re)-.74 G
+(es \(AST\) theory).18 E F0 .69(In a programming language man)111 171.6
R 3.19(ya)-.15 G .691(bstract data types will be used to allo)-3.19 F
3.191(wt)-.25 G .691(he code to e)-3.191 F -.15(xe)-.15 G(cute,).15 E
-(ho)111 235.2 Q(we)-.25 E -.15(ve)-.25 G 3.698(rIt).15 G 1.197(hink the\
+(ho)111 183.6 Q(we)-.25 E -.15(ve)-.25 G 3.698(rIt).15 G 1.197(hink the\
hardest part of this is an abstract syntax tree. This is a data struct\
ure that)-3.698 F .376
-(holds the code in an ordered form that can be analysed and e)111 247.2
+(holds the code in an ordered form that can be analysed and e)111 195.6
R -.15(xe)-.15 G .377(cuted in a simple w).15 F(ay)-.1 E 2.877(.I)-.65 G
2.877(ti)-2.877 G 2.877(sat)-2.877 G(ree)-2.877 E .247
-(structure, with the top node being a root and all lo)111 259.2 R .247
+(structure, with the top node being a root and all lo)111 207.6 R .247
(wer nodes being things needed to calculate the)-.25 F .824
-(root. It can be used not only for code b)111 271.2 R .825
+(root. It can be used not only for code b)111 219.6 R .825
(ut also for mathematical e)-.2 F .825(xpressions. I think the easiest)
--.15 F -.1(wa)111 283.2 S 2.5(yt).1 G 2.5(os)-2.5 G(ho)-2.5 E 2.5(wi)
+-.15 F -.1(wa)111 231.6 S 2.5(yt).1 G 2.5(os)-2.5 G(ho)-2.5 E 2.5(wi)
-.25 G 2.5(ti)-2.5 G 2.5(sv)-2.5 G(ia a mathematical e)-2.5 E(xample)
--.15 E -.8(Ta)111 307.2 S .2 -.1(ke t).8 H(he follo).1 E 2.5(we)-.25 G
-(xpression for e)-2.65 E(xample:)-.15 E .4 LW 111 323.7 111 333.7 DL
-210.61 323.7 111 323.7 DL 210.61 333.7 210.61 323.7 DL 111 333.7 210.61
-333.7 DL(\(1 + \(10 * \(3 - \(2 * 4\)\)\)\))113 331.2 Q 1.6 -.8(We k)111
-355.2 T(no).8 E 2.5(wt)-.25 G(hat this is equal to -49)-2.5 E(Ho)111
-379.2 Q(we)-.25 E -.15(ve)-.25 G 2.917(rf).15 G .417
+-.15 E -.8(Ta)111 255.6 S .2 -.1(ke t).8 H(he follo).1 E 2.5(we)-.25 G
+(xpression for e)-2.65 E(xample:)-.15 E .4 LW 111 272.1 111 282.1 DL
+210.61 272.1 111 272.1 DL 210.61 282.1 210.61 272.1 DL 111 282.1 210.61
+282.1 DL(\(1 + \(10 * \(3 - \(2 * 4\)\)\)\))113 279.6 Q 1.6 -.8(We k)111
+303.6 T(no).8 E 2.5(wt)-.25 G(hat this is equal to -49)-2.5 E(Ho)111
+327.6 Q(we)-.25 E -.15(ve)-.25 G 2.917(rf).15 G .417
(or a computer this is f)-2.917 F .416
(ar harder to understand. This is because it has no understanding)-.1 F
-(of order of operation)111 391.2 Q 1.6 -.8(To s)111 415.2 T(olv).8 E 2.5
+(of order of operation)111 339.6 Q 1.6 -.8(To s)111 363.6 T(olv).8 E 2.5
(et)-.15 G(his we use an AST \(abstract syntax tree\))-2.5 E .187
-(When you solv)111 439.2 R 2.687(et)-.15 G .187(hat e)-2.687 F .187
+(When you solv)111 387.6 R 2.687(et)-.15 G .187(hat e)-2.687 F .187
(xpression you kno)-.15 F 2.687(wt)-.25 G 2.687(os)-2.687 G .187
(tart with \(2 * 4\), then 3 - the answer to that and so)-2.687 F(on)111
-451.2 Q 1.6 -.8(We c)111 475.2 T(an represent the steps as a tree lik).8
-E 2.5(es)-.1 G(o:)-2.5 E 14 14 50 50 -87 87 281 586.2 PBEGIN
+399.6 Q 1.6 -.8(We c)111 423.6 T(an represent the steps as a tree lik).8
+E 2.5(es)-.1 G(o:)-2.5 E 14 14 50 50 -87 87 281 534.6 PBEGIN
%%BeginDocument: ast.ps
%!PS-Adobe-3.0
%%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner
@@ -2692,40 +2693,40 @@ end
%%EOF
%%EndDocument
end PEND/F2 10/Times-Italic@0 SF([Evalutates to 2 * \(2 + 2\)])111.29
-610.2 Q F0 .347(As you can see, you need to e)111 634.2 R -.25(va)-.25 G
+558.6 Q F0 .347(As you can see, you need to e)111 582.6 R -.25(va)-.25 G
.347(luate the e).25 F .347(xpression in the most brack)-.15 F .346
-(ets \214rst, then the ne)-.1 F .346(xt, and)-.15 F(so on, w)111 646.2 Q
-(orking you w)-.1 E(ay up)-.1 E -1.1(Yo)111 670.2 S 2.646(uc)1.1 G .146
+(ets \214rst, then the ne)-.1 F .346(xt, and)-.15 F(so on, w)111 594.6 Q
+(orking you w)-.1 E(ay up)-.1 E -1.1(Yo)111 618.6 S 2.646(uc)1.1 G .146
(an e)-2.646 F -.25(va)-.25 G .147(luate code in a similar w).25 F(ay)
-.1 E 2.647(,t)-.65 G .147
(reating each operation \(such as +-*/\) as functions, doing)-2.647 F
-.002(the most deeply nested function \214rst, then w)111 682.2 R .002
+.002(the most deeply nested function \214rst, then w)111 630.6 R .002
(orking up. Each e)-.1 F .002(xpression can be represented in this)-.15
-F(tree, then to sho)111 694.2 Q 2.5(waw)-.25 G
+F(tree, then to sho)111 642.6 Q 2.5(waw)-.25 G
(hole program you can create a list of trees)-2.5 E F1 2.5
-(2.9.2. Implementing)111 730.2 R(AST')2.5 E(s)-.37 E 0 Cg EP
+(2.9.2. Implementing)111 678.6 R(AST')2.5 E(s)-.37 E F0 .32
+(As a prototype i will mak)111 694.2 R 2.821(eap)-.1 G .321
+(rogram that can tak)-2.821 F 2.821(em)-.1 G .321(athematical e)-2.821 F
+.321(xpressions and e)-.15 F -.25(va)-.25 G .321(luate them,).25 F
+(and allo)111 706.2 Q(wing for functions \(in the form f\(x\)\).)-.25 E
+(It will do this via AST')5 E(s)-.55 E .718(This prototype tak)111 730.2
+R .718(es 173 lines of code, it tak)-.1 F .718
+(es a string as a cmd line ar)-.1 F .717(gument then con)-.18 F -.15(ve)
+-.4 G .717(rts it).15 F 0 Cg EP
%%Page: 8 8
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-8-)300.17 48 Q .32(As a prototype i will mak)
-111 84 R 2.821(eap)-.1 G .321(rogram that can tak)-2.821 F 2.821(em)-.1
-G .321(athematical e)-2.821 F .321(xpressions and e)-.15 F -.25(va)-.25
-G .321(luate them,).25 F(and allo)111 96 Q
-(wing for functions \(in the form f\(x\)\).)-.25 E
-(It will do this via AST')5 E(s)-.55 E .718(This prototype tak)111 120 R
-.718(es 173 lines of code, it tak)-.1 F .718
-(es a string as a cmd line ar)-.1 F .717(gument then con)-.18 F -.15(ve)
--.4 G .717(rts it).15 F .177
-(into an abstract syntax tree, and \214nally it e)111 132 R -.15(xe)-.15
+/F0 10/Times-Roman@0 SF(-8-)300.17 48 Q .177
+(into an abstract syntax tree, and \214nally it e)111 84 R -.15(xe)-.15
G .178(cutes it. This is just a simple prototype and thus it is).15 F
.171(small in scope. It can only do simple operators \(+-*/\) and requi\
-res literal v)111 144 R .17(alues to be surrounded)-.25 F
-(by [] so it kno)111 156 Q(ws its not another e)-.25 E(xpression to e)
--.15 E -.25(va)-.25 G(luate.).25 E(https://github)111 180 Q
+res literal v)111 96 R .17(alues to be surrounded)-.25 F
+(by [] so it kno)111 108 Q(ws its not another e)-.25 E(xpression to e)
+-.15 E -.25(va)-.25 G(luate.).25 E(https://github)111 132 Q
(.com/standenbo)-.4 E
(y/school/tree/master/comp/lucas-standen-NEA/code/proto/ast)-.1 E 14 14
-230 230 -426 426 191 630 PBEGIN
+230 230 -426 426 191 582 PBEGIN
%%BeginDocument: astg.ps
%!PS-Adobe-3.0
%%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner
@@ -15535,43 +15536,44 @@ showpage
end
%%EOF
%%EndDocument
-end PEND(Abo)111 657.6 Q .335 -.15(ve i)-.15 H 2.535(st).15 G .035
+end PEND(Abo)111 609.6 Q .335 -.15(ve i)-.15 H 2.535(st).15 G .035
(he code for the AST)-2.535 F 2.535(,i)-.74 G 2.535(ts)-2.535 G .035
(tores an operation \(which is just an inte)-2.535 F .035
-(ger\), and it stores a real)-.15 F .676(left and real right v)111 669.6
+(ger\), and it stores a real)-.15 F .676(left and real right v)111 621.6
R .675(alue, along side tw)-.25 F 3.175(oo)-.1 G .675
(ther nodes. The real v)-3.175 F .675(alues are inte)-.25 F .675
(gers, this w)-.15 F .675(ould be)-.1 F .943
-(the 2 numbers in reference in the e)111 681.6 R .944
+(the 2 numbers in reference in the e)111 633.6 R .944
(xpression. The 2 nodes are a recursi)-.15 F 1.244 -.15(ve d)-.25 H .944
-(ata structure, much).15 F(lik)111 693.6 Q 3.489(ep)-.1 G .988(utting a\
+(ata structure, much).15 F(lik)111 645.6 Q 3.489(ep)-.1 G .988(utting a\
n object of a class inside the de\214nition of that class itself. The)
-3.489 F 3.488(ya)-.15 G .988(re used to store)-3.488 F -.25(va)111
-705.6 S .08(lues that may still be e).25 F .08(xpressions, for e)-.15 F
+657.6 S .08(lues that may still be e).25 F .08(xpressions, for e)-.15 F
.081(xample \(+ [1] \(+ [1] [1]\)\) the second part of this e)-.15 F
-(xpres-)-.15 E .533(sion w)111 717.6 R .533(ould be in the "right" v)-.1
+(xpres-)-.15 E .533(sion w)111 669.6 R .533(ould be in the "right" v)-.1
F .533(ariable. When code is e)-.25 F -.15(xe)-.15 G .533
(cuted I can check if "left", or "right" are).15 F .749(null and if the)
-111 729.6 R 3.249(ya)-.15 G .749(re i kno)-3.249 F 3.249(wt)-.25 G .749
+111 681.6 R 3.249(ya)-.15 G .749(re i kno)-3.249 F 3.249(wt)-.25 G .749
(hat i am at the lo)-3.249 F .749(west e)-.25 F .749
(xpression that is only literal v)-.15 F 3.249(alues. Then)-.25 F(I)
-3.249 E 0 Cg EP
+3.249 E(can e)111 693.6 Q -.15(xe)-.15 G(cute that node and w).15 E
+(ork my w)-.1 E(ay up the tree.)-.1 E .81(The e)111 729.6 R -.15(xe)-.15
+G 3.31(cf).15 G .81(unction will e)-3.31 F -.15(xe)-.15 G .809(cute the\
+ operation, unless there is a deeper node, if there is a deeper).15 F 0
+Cg EP
%%Page: 9 9
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-9-)300.17 48 Q(can e)111 84 Q -.15(xe)-.15 G
-(cute that node and w).15 E(ork my w)-.1 E(ay up the tree.)-.1 E .81
-(The e)111 120 R -.15(xe)-.15 G 3.31(cf).15 G .81(unction will e)-3.31 F
--.15(xe)-.15 G .809(cute the operation, unless there is a deeper node, \
-if there is a deeper).15 F(node, then it e)111 132 Q -.15(xe)-.15 G
+/F0 10/Times-Roman@0 SF(-9-)300.17 48 Q(node, then it e)111 84 Q -.15
+(xe)-.15 G
(cutes it, and places the result in the right or left spot respecti).15
-E -.15(ve)-.25 G(ly).15 E(.)-.65 E(Expressions are tak)111 156 Q
+E -.15(ve)-.25 G(ly).15 E(.)-.65 E(Expressions are tak)111 108 Q
(en as input with the follo)-.1 E(wing code, and con)-.25 E -.15(ve)-.4
-G(rted into the AST).15 E(:)-.5 E(https://github)111 180 Q
+G(rted into the AST).15 E(:)-.5 E(https://github)111 132 Q
(.com/standenbo)-.4 E
(y/school/tree/master/comp/lucas-standen-NEA/code/proto/ast)-.1 E 14 14
-134 134 -426 426 239 630 PBEGIN
+134 134 -426 426 239 582 PBEGIN
%%BeginDocument: ast.c.ps
%!PS-Adobe-3.0
%%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner
@@ -50496,41 +50498,41 @@ showpage
end
%%EOF
%%EndDocument
-end PEND(Here is an e)111 654 Q(xample input and output:)-.15 E
-(./ast "\(+ \(- [3] [1]\) \(- [3] [1]\)\)")113.5 678 Q .4 LW 111 694.5
-111 704.5 DL 120 694.5 111 694.5 DL 120 704.5 120 694.5 DL 111 704.5 120
-704.5 DL(4)113 702 Q
-(Note the [] used to tell the program where the literal v)111 726 Q
-(alues are.)-.25 E 0 Cg EP
+end PEND(Here is an e)111 606 Q(xample input and output:)-.15 E
+(./ast "\(+ \(- [3] [1]\) \(- [3] [1]\)\)")113.5 630 Q .4 LW 111 646.5
+111 656.5 DL 120 646.5 111 646.5 DL 120 656.5 120 646.5 DL 111 656.5 120
+656.5 DL(4)113 654 Q
+(Note the [] used to tell the program where the literal v)111 678 Q
+(alues are.)-.25 E(Ov)111 702 Q .447(erall this w)-.15 F .448
+(as a relati)-.1 F -.15(ve)-.25 G .448(ly successful prototype, ho).15 F
+(we)-.25 E -.15(ve)-.25 G 2.948(ri).15 G 2.948(ti)-2.948 G(sn')-2.948 E
+2.948(tf)-.18 G .448(ully functional as a language)-2.948 F
+(it has \214t the design.)111 714 Q 0 Cg EP
%%Page: 10 10
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-10-)297.67 48 Q(Ov)111 84 Q .447(erall this w)
--.15 F .448(as a relati)-.1 F -.15(ve)-.25 G .448
-(ly successful prototype, ho).15 F(we)-.25 E -.15(ve)-.25 G 2.948(ri).15
-G 2.948(ti)-2.948 G(sn')-2.948 E 2.948(tf)-.18 G .448
-(ully functional as a language)-2.948 F(it has \214t the design.)111 96
-Q 1.014(The rest of the code is the process of con)111 120 R -.15(ve)-.4
-G 1.014(rting the string input to literal v).15 F 1.014
-(alues and inserting)-.25 F(them into the AST)111 132 Q/F1 10
-/Times-Bold@0 SF 2.5(2.9.3. F)111 168 R(eedback)-.25 E F0 .656(From my \
-\214rst Client \(Amy C\), she said that putting the numbers inside squa\
-re brack)111 183.6 R .657(ets w)-.1 F .657(as in-)-.1 F(con)111 195.6 Q
--.15(ve)-.4 G .408(nient and anno).15 F .408(ying and it w)-.1 F .407
+/F0 10/Times-Roman@0 SF(-10-)297.67 48 Q 1.014
+(The rest of the code is the process of con)111 84 R -.15(ve)-.4 G 1.014
+(rting the string input to literal v).15 F 1.014(alues and inserting)
+-.25 F(them into the AST)111 96 Q/F1 10/Times-Bold@0 SF 2.5(2.9.3. F)111
+132 R(eedback)-.25 E F0 .656(From my \214rst Client \(Amy C\), she said\
+ that putting the numbers inside square brack)111 147.6 R .657(ets w)-.1
+F .657(as in-)-.1 F(con)111 159.6 Q -.15(ve)-.4 G .408(nient and anno)
+.15 F .408(ying and it w)-.1 F .407
(ould be better if the numbers were separated by spaces instead)-.1 F
-(of separate square brack)111 207.6 Q(et surrounded literals.)-.1 E .549
-(As this is a prototype I w)111 231.6 R(on')-.1 E 3.049<748c>-.18 G
+(of separate square brack)111 171.6 Q(et surrounded literals.)-.1 E .549
+(As this is a prototype I w)111 195.6 R(on')-.1 E 3.049<748c>-.18 G
3.049(xt)-3.049 G .549(his issue, ho)-3.049 F(we)-.25 E -.15(ve)-.25 G
3.049(ri).15 G 3.049(nt)-3.049 G .549
(he actual language this is a needed fea-)-3.049 F
-(ture that I will be implementing.)111 243.6 Q F1 2.5(2.9.4. Mixing)111
-279.6 R(link)2.5 E(ed lists and AST')-.1 E(s)-.37 E F0 1.233(Mixing the\
+(ture that I will be implementing.)111 207.6 Q F1 2.5(2.9.4. Mixing)111
+243.6 R(link)2.5 E(ed lists and AST')-.1 E(s)-.37 E F0 1.233(Mixing the\
se 2 data structures together you can repressent an entire program. A l\
-ink)111 295.2 R 1.233(ed list of)-.1 F(AST')111 307.2 Q 2.5(si)-.55 G
+ink)111 259.2 R 1.233(ed list of)-.1 F(AST')111 271.2 Q 2.5(si)-.55 G
2.5(sh)-2.5 G .5 -.25(ow Z)-2.5 H(ipp).25 E 2.5(yw)-.1 G
-(ill repressent all code the user writes)-2.5 E(Here is an e)111 331.2 Q
-(xample of this:)-.15 E 14 14 142 142 -135 135 235 490.2 PBEGIN
+(ill repressent all code the user writes)-2.5 E(Here is an e)111 295.2 Q
+(xample of this:)-.15 E 14 14 142 142 -135 135 235 454.2 PBEGIN
%%BeginDocument: AST+LL.ps
%!PS-Adobe-3.0
%%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner
@@ -52329,442 +52331,442 @@ showpage
end
%%EOF
%%EndDocument
-end PEND .711(In this e)111 517.8 R .711(xample the link)-.15 F .711
+end PEND .711(In this e)111 481.8 R .711(xample the link)-.15 F .711
(ed list is represented by the numbers seen at the top, and the AST')-.1
-F 3.212(sa)-.55 G(re)-3.212 E(the tree')111 529.8 Q 2.5(sm)-.55 G -.15
+F 3.212(sa)-.55 G(re)-3.212 E(the tree')111 493.8 Q 2.5(sm)-.55 G -.15
(ov)-2.5 G(ing do).15 E(wn.)-.25 E .669(As you can see when a v)111
-553.8 R .669(alue is referenced that is from a dif)-.25 F .668
+517.8 R .669(alue is referenced that is from a dif)-.25 F .668
(ferent AST the tree will link to an-)-.25 F .378
-(other one. This will w)111 565.8 R .378
+(other one. This will w)111 529.8 R .378
(ork the same for function calls, ho)-.1 F(we)-.25 E -.15(ve)-.25 G
2.878(ri).15 G .378(nstead of linking to v)-2.878 F .379(alue de\214ni-)
--.25 F(tions it will link to function de\214nitions.)111 577.8 Q F1 2.5
-(2.10. Objecti)111 613.8 R -.1(ve)-.1 G(s).1 E 2.5(2.10.1. An)111 637.8
+-.25 F(tions it will link to function de\214nitions.)111 541.8 Q F1 2.5
+(2.10. Objecti)111 577.8 R -.1(ve)-.1 G(s).1 E 2.5(2.10.1. An)111 601.8
R(inter)2.5 E(pr)-.1 E(eter f)-.18 E(or the Zippy language)-.25 E 2.5
-(2.10.1.1. Link)111 661.8 R(ed list of AST')-.1 E(s)-.37 E F0 .033
-(All of a loaded program should be represented as a link)111 677.4 R
+(2.10.1.1. Link)111 625.8 R(ed list of AST')-.1 E(s)-.37 E F0 .033
+(All of a loaded program should be represented as a link)111 641.4 R
.033(ed list of indi)-.1 F .033(vidual AST')-.25 F .033(s, The de)-.55 F
-.15(ve)-.25 G(loper).15 E .528(should be able to access the AST for ea\
-sy hacking. Functions can be represented as a pointer to)111 689.4 R
-(another part of the list.)111 701.4 Q F1 2.5(2.10.1.2. A)111 725.4 R
-(lisp lik)2.5 E 2.5(es)-.1 G(yntax)-2.5 E 0 Cg EP
+sy hacking. Functions can be represented as a pointer to)111 653.4 R
+(another part of the list.)111 665.4 Q F1 2.5(2.10.1.2. A)111 689.4 R
+(lisp lik)2.5 E 2.5(es)-.1 G(yntax)-2.5 E F0
+(This is to ensure the language can be parsed quickly)111 705 Q 2.5(,a)
+-.65 G(nd is easy to write.)-2.5 E F1 2.5(2.10.1.3. Functional)111 729 R
+(language)2.5 E 0 Cg EP
%%Page: 11 11
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-11-)297.67 48 Q
-(This is to ensure the language can be parsed quickly)111 84 Q 2.5(,a)
--.65 G(nd is easy to write.)-2.5 E/F1 10/Times-Bold@0 SF 2.5
-(2.10.1.3. Functional)111 108 R(language)2.5 E F0 1.366(This language s\
-hould lean into the functional programming paradigm, taking inspiration\
- from)111 123.6 R(other functional languages such as lisp, and gleam.)
-111 135.6 Q F1 2.5(2.10.1.3.1. Recursion)111 159.6 R F0(Zipp)111 175.2 Q
+/F0 10/Times-Roman@0 SF(-11-)297.67 48 Q 1.366(This language should lea\
+n into the functional programming paradigm, taking inspiration from)111
+84 R(other functional languages such as lisp, and gleam.)111 96 Q/F1 10
+/Times-Bold@0 SF 2.5(2.10.1.3.1. Recursion)111 120 R F0(Zipp)111 135.6 Q
2.621(ym)-.1 G .121(ust support recursi)-2.621 F .421 -.15(ve a)-.25 H
.121(lgorithms being implemented into it, this will mak).15 F 2.622(et)
-.1 G .122(he AST)-2.622 F 2.622(,h)-.74 G -2.25 -.2(av e)-2.622 H
-(nodes linking back to parent nodes in a link)111 187.2 Q(ed list.)-.1 E
-F1 2.5(2.10.1.3.2. Higher)111 211.2 R(order functions)2.5 E F0(Zipp)111
-226.8 Q 2.693(ym)-.1 G .192(ust support the usage of higher order funct\
+(nodes linking back to parent nodes in a link)111 147.6 Q(ed list.)-.1 E
+F1 2.5(2.10.1.3.2. Higher)111 171.6 R(order functions)2.5 E F0(Zipp)111
+187.2 Q 2.693(ym)-.1 G .192(ust support the usage of higher order funct\
ions, this will mean the AST needs to ha)-2.693 F .492 -.15(ve a)-.2 H
-(n).15 E .558(unlimited depth as otherwise the limit w)111 238.8 R .559
+(n).15 E .558(unlimited depth as otherwise the limit w)111 199.2 R .559
(ould be quickly reached, it can')-.1 F 3.059(tb)-.18 G 3.059(eh)-3.059
-G .559(ard-coded, it must)-3.059 F(be dynamic.)111 250.8 Q F1 2.5
-(2.10.1.4. P)111 274.8 R(erf)-.2 E(ormance)-.25 E F0 .584
-(The interpreter must be f)111 290.4 R .584(ast and memory ef)-.1 F .584
+G .559(ard-coded, it must)-3.059 F(be dynamic.)111 211.2 Q F1 2.5
+(2.10.1.4. P)111 235.2 R(erf)-.2 E(ormance)-.25 E F0 .584
+(The interpreter must be f)111 250.8 R .584(ast and memory ef)-.1 F .584
(\214cient, the language is designed to w)-.25 F .583(ork as an alter)
--.1 F(-)-.2 E(nati)111 302.4 Q .344 -.15(ve t)-.25 H 2.544(oC).15 G
+-.1 F(-)-.2 E(nati)111 262.8 Q .344 -.15(ve t)-.25 H 2.544(oC).15 G
2.544(,o)-2.544 G .044(ne of the f)-2.544 F .045
(astest languages of all time, the interpreter must be f)-.1 F .045
(ast, ho)-.1 F(we)-.25 E -.15(ve)-.25 G 2.545(rm).15 G(emory)-2.545 E
-(footprint is not as much of a requirement.)111 314.4 Q F1 2.5
-(2.10.1.5. Safe)111 338.4 R F0 1.269(Code that the user writes must be \
-safe, and not prone to errors. This can be handeled via the)111 354 R
-(strong syntax check)111 366 Q(er and type safety)-.1 E(.)-.65 E F1 2.5
-(2.10.2. Standard)111 402 R(library f)2.5 E(or Zippy)-.25 E 2.5
-(2.10.2.1. io)111 426 R F0(The language must ha)111 441.6 Q .3 -.15
+(footprint is not as much of a requirement.)111 274.8 Q F1 2.5
+(2.10.1.5. Safe)111 298.8 R F0 1.269(Code that the user writes must be \
+safe, and not prone to errors. This can be handeled via the)111 314.4 R
+(strong syntax check)111 326.4 Q(er and type safety)-.1 E(.)-.65 E F1
+2.5(2.10.2. Standard)111 362.4 R(library f)2.5 E(or Zippy)-.25 E 2.5
+(2.10.2.1. io)111 386.4 R F0(The language must ha)111 402 Q .3 -.15
(ve a s)-.2 H(imple to use I/O library to mak).15 E 2.5(eo)-.1 G
-(utputs easy)-2.5 E(.)-.65 E F1 2.5(2.10.2.2. string)111 465.6 R F0
-1.168(The language should ha)111 481.2 R 1.468 -.15(ve a s)-.2 H 1.168
+(utputs easy)-2.5 E(.)-.65 E F1 2.5(2.10.2.2. string)111 426 R F0 1.168
+(The language should ha)111 441.6 R 1.468 -.15(ve a s)-.2 H 1.168
(ting library that pro).15 F 1.168(vides a string type, and man)-.15 F
3.668(yc)-.15 G(omple)-3.668 E 3.668(xa)-.15 G(lgo-)-3.668 E(rithms tha\
t can be applied to them \(concatenation, insertion, appending, splitti\
-ng, stripping\).)111 493.2 Q F1 2.5(2.10.2.3. sorts)111 517.2 R F0 .457
-(The language should ha)111 532.8 R .757 -.15(ve a s)-.2 H .456
+ng, stripping\).)111 453.6 Q F1 2.5(2.10.2.3. sorts)111 477.6 R F0 .457
+(The language should ha)111 493.2 R .757 -.15(ve a s)-.2 H .456
(orting library that pro).15 F .456
(vides algorithms used for sorting \(lik)-.15 F 2.956(em)-.1 G(er)-2.956
-E(ge)-.18 E(sort\).)111 544.8 Q F1 2.5(2.10.2.4. graphs)111 568.8 R F0
-.331(the language must ha)111 584.4 R .632 -.15(ve a g)-.2 H .332
+E(ge)-.18 E(sort\).)111 505.2 Q F1 2.5(2.10.2.4. graphs)111 529.2 R F0
+.331(the language must ha)111 544.8 R .632 -.15(ve a g)-.2 H .332
(raph library).15 F 2.832(,t)-.65 G .332(hat allo)-2.832 F .332
(ws for easy creation and w)-.25 F .332(orking with graphs, it)-.1 F
-(should pro)111 596.4 Q(vide man)-.15 E 2.5(ya)-.15 G
+(should pro)111 556.8 Q(vide man)-.15 E 2.5(ya)-.15 G
(lgorithms to help tra)-2.5 E -.15(ve)-.2 G(rse these graphs).15 E F1
-2.5(2.10.3. T)111 632.4 R(ooling f)-.92 E(or the Zippy language)-.25 E
-2.5(2.10.3.1. zpypkg)111 656.4 R F0(Zipp)111 672 Q 3.562(ym)-.1 G 1.062
-(ust pro)-3.562 F 1.062(vide a package manager)-.15 F 3.562(,t)-.4 G
-1.061(hat allo)-3.562 F 1.061
-(ws code to be shared between multiple users,)-.25 F(easily)111 684 Q 5
-(.I)-.65 G 2.5(ts)-5 G(hould sync projects via git and allo)-2.5 E 2.5
+2.5(2.10.3. T)111 592.8 R(ooling f)-.92 E(or the Zippy language)-.25 E
+2.5(2.10.3.1. zpypkg)111 616.8 R F0(Zipp)111 632.4 Q 3.562(ym)-.1 G
+1.062(ust pro)-3.562 F 1.062(vide a package manager)-.15 F 3.562(,t)-.4
+G 1.061(hat allo)-3.562 F 1.061
+(ws code to be shared between multiple users,)-.25 F(easily)111 644.4 Q
+5(.I)-.65 G 2.5(ts)-5 G(hould sync projects via git and allo)-2.5 E 2.5
(wt)-.25 G(hem to be stored on an)-2.5 E 2.5(yg)-.15 G
-(it host the user lik)-2.5 E(es.)-.1 E F1 2.5(2.10.3.2. Syntax)111 708 R
-(check)2.5 E(er)-.1 E F0(Zipp)111 723.6 Q 2.711(ys)-.1 G(houldn')-2.711
-E 2.711(th)-.18 G -2.25 -.2(av e)-2.711 H 2.711(ab)2.911 G .211
+(it host the user lik)-2.5 E(es.)-.1 E F1 2.5(2.10.3.2. Syntax)111 668.4
+R(check)2.5 E(er)-.1 E F0(Zipp)111 684 Q 2.711(ys)-.1 G(houldn')-2.711 E
+2.711(th)-.18 G -2.25 -.2(av e)-2.711 H 2.711(ab)2.911 G .211
(uilt in syntax check)-2.911 F(er)-.1 E 2.711(,i)-.4 G .211
-(nstead it should be something that can be run in-)-2.711 F 0 Cg EP
+(nstead it should be something that can be run in-)-2.711 F .124
+(dependently of the interpreter)111 696 R 2.624(,t)-.4 G .124
+(his means that a lot of the checking that interpreted languages do,)
+-2.624 F .908(can be done once by the de)111 708 R -.15(ve)-.25 G(loper)
+.15 E 3.409(,b)-.4 G .909(efore shipping the app, as opposed to e)-3.409
+F -.15(ve)-.25 G .909(ry time the pro-).15 F
+(gram is run, which brings do)111 720 Q(wn performance.)-.25 E 0 Cg EP
%%Page: 12 12
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-12-)297.67 48 Q .124
-(dependently of the interpreter)111 84 R 2.624(,t)-.4 G .124
-(his means that a lot of the checking that interpreted languages do,)
--2.624 F .908(can be done once by the de)111 96 R -.15(ve)-.25 G(loper)
-.15 E 3.409(,b)-.4 G .909(efore shipping the app, as opposed to e)-3.409
-F -.15(ve)-.25 G .909(ry time the pro-).15 F
-(gram is run, which brings do)111 108 Q(wn performance.)-.25 E/F1 10
-/Times-Bold@0 SF 2.5(2.10.4. Integration)111 132 R(with C, via a C API)
-2.5 E 2.5(2.10.4.1. C)111 156 R(API)2.5 E F0 -1.1(Yo)111 171.6 S 2.592
-(us)1.1 G .092(hould be able to e)-2.592 F -.15(xe)-.15 G .092
-(cute a string of Zipp).15 F 2.592(yc)-.1 G .092
-(ode in C using a library that is link)-2.592 F .092(ed with inter)-.1 F
-(-)-.2 E(preter)111 183.6 Q 2.5(.T)-.55 G(his could allo)-2.5 E 2.5(wZ)
--.25 G(ipp)-2.5 E 2.5(yt)-.1 G 2.5(ob)-2.5 G 2.5(eu)-2.5 G
-(sed as a con\214guration language lik)-2.5 E 2.5(eL)-.1 G(ua.)-2.5 E F1
-2.5(2.11. Desirable)111 219.6 R(featur)2.5 E(es)-.18 E F0(If time allo)
-111 235.2 Q(ws I')-.25 E 2.5(dl)-.5 G(ik)-2.5 E 2.5(et)-.1 G 2.5(oa)-2.5
-G(dd some of the follo)-2.5 E
+/F0 10/Times-Roman@0 SF(-12-)297.67 48 Q/F1 10/Times-Bold@0 SF 2.5
+(2.10.4. Integration)111 84 R(with C, via a C API)2.5 E 2.5(2.10.4.1. C)
+111 108 R(API)2.5 E F0 -1.1(Yo)111 123.6 S 2.592(us)1.1 G .092
+(hould be able to e)-2.592 F -.15(xe)-.15 G .092(cute a string of Zipp)
+.15 F 2.592(yc)-.1 G .092(ode in C using a library that is link)-2.592 F
+.092(ed with inter)-.1 F(-)-.2 E(preter)111 135.6 Q 2.5(.T)-.55 G
+(his could allo)-2.5 E 2.5(wZ)-.25 G(ipp)-2.5 E 2.5(yt)-.1 G 2.5(ob)-2.5
+G 2.5(eu)-2.5 G(sed as a con\214guration language lik)-2.5 E 2.5(eL)-.1
+G(ua.)-2.5 E F1 2.5(2.11. Desirable)111 171.6 R(featur)2.5 E(es)-.18 E
+F0(If time allo)111 187.2 Q(ws I')-.25 E 2.5(dl)-.5 G(ik)-2.5 E 2.5(et)
+-.1 G 2.5(oa)-2.5 G(dd some of the follo)-2.5 E
(wing features to \215esh out the language:)-.25 E F1 2.5
-(2.11.1. Raylib)111 259.2 R(support)2.5 E F0 .321(Raylib is a po)111
-274.8 R .321(werful g)-.25 F .321(ame engine for C, ho)-.05 F(we)-.25 E
+(2.11.1. Raylib)111 211.2 R(support)2.5 E F0 .321(Raylib is a po)111
+226.8 R .321(werful g)-.25 F .321(ame engine for C, ho)-.05 F(we)-.25 E
-.15(ve)-.25 G 2.821(ri).15 G 2.821(th)-2.821 G .321
(as been ported to most languages under the)-2.821 F .333(sun due to ho)
-111 286.8 R 2.832(ws)-.25 G .332(imple it is. If I ha)-2.832 F .632 -.15
+111 238.8 R 2.832(ws)-.25 G .332(imple it is. If I ha)-2.832 F .632 -.15
(ve t)-.2 H .332(ime, porting Raylib to Zipp).15 F 2.832(yw)-.1 G .332
(ould mak)-2.932 F 2.832(et)-.1 G .332(he language f)-2.832 F(ar)-.1 E
-(more useable, as it can be use for graphics programming.)111 298.8 Q
-(https://www)111 322.8 Q(.Raylib)-.65 E(.com/)-.4 E F1 2.5(2.11.2. V)111
-358.8 R(im integration.)-.37 E F0(Zipp)111 374.4 Q 3.248(ys)-.1 G .748
+(more useable, as it can be use for graphics programming.)111 250.8 Q
+(https://www)111 274.8 Q(.Raylib)-.65 E(.com/)-.4 E F1 2.5(2.11.2. V)111
+310.8 R(im integration.)-.37 E F0(Zipp)111 326.4 Q 3.248(ys)-.1 G .748
(hould ha)-3.248 F 1.048 -.15(ve i)-.2 H(nte).15 E .748
(gration with the V)-.15 F .748
(im editor for syntax highlighting, this can be done via)-.6 F .128
-(generating a link)111 386.4 R .128(ed list of AST')-.1 F 2.628(st)-.55
+(generating a link)111 338.4 R .128(ed list of AST')-.1 F 2.628(st)-.55
G .128(hen colouring function calls a speci\214c colour)-2.628 F 2.628
-(,a)-.4 G .128(nd v)-2.628 F .128(ariables an-)-.25 F(other)111 398.4 Q
-2.5(,e)-.4 G(tc, etc.)-2.5 E F1 2.5(2.11.3. LSP)111 422.4 R F0 3.054(AL)
-111 438 S .554(SP \(language serv)-3.054 F .555
+(,a)-.4 G .128(nd v)-2.628 F .128(ariables an-)-.25 F(other)111 350.4 Q
+2.5(,e)-.4 G(tc, etc.)-2.5 E F1 2.5(2.11.3. LSP)111 374.4 R F0 3.054(AL)
+111 390 S .554(SP \(language serv)-3.054 F .555
(er protocol\), is used in code IDE')-.15 F 3.055(st)-.55 G 3.055(oa)
-3.055 G .555(uto complete code for you, I')-3.055 F 3.055(dl)-.5 G(ik)
--3.055 E(e)-.1 E .144(one for Zipp)111 450 R 1.444 -.65(y. A)-.1 H .144
+-3.055 E(e)-.1 E .144(one for Zipp)111 402 R 1.444 -.65(y. A)-.1 H .144
(lthough I am unsure as to ho).65 F 2.643(wt)-.25 G 2.643(ot)-2.643 G
.143(ackle this. I belie)-2.643 F .443 -.15(ve a p)-.25 H .143
-(rogram called treesitter).15 F(can be helpful for this.)111 462 Q F1
-2.5(2.11.4. Netw)111 486 R(orking sock)-.1 E(ets)-.1 E F0 .101
-(If possible I')111 501.6 R 2.601(da)-.5 G .101(lso lik)-2.601 F 2.601
+(rogram called treesitter).15 F(can be helpful for this.)111 414 Q F1
+2.5(2.11.4. Netw)111 438 R(orking sock)-.1 E(ets)-.1 E F0 .101
+(If possible I')111 453.6 R 2.601(da)-.5 G .101(lso lik)-2.601 F 2.601
(et)-.1 G 2.601(op)-2.601 G(ro)-2.601 E .101
(vide bindings for unix netw)-.15 F .101(ork sock)-.1 F .101(ets, ho)-.1
F(we)-.25 E -.15(ve)-.25 G 2.602(rt).15 G .102(his w)-2.602 F .102
-(ould be v)-.1 F(ery)-.15 E(dif)111 513.6 Q .274(\214cult, as I w)-.25 F
+(ould be v)-.1 F(ery)-.15 E(dif)111 465.6 Q .274(\214cult, as I w)-.25 F
.274(ould need to allo)-.1 F 2.774(wZ)-.25 G(ipp)-2.774 E 2.774(ys)-.1 G
.273(tucts to be directly con)-2.774 F -.15(ve)-.4 G .273
(rted to C stucts, when e).15 F -.15(xe)-.15 G(cut-).15 E
-(ing ELF symbols \(P)111 525.6 Q(arts of an e)-.15 E -.15(xe)-.15 G
-(cuable \214le\).).15 E F1 2.5(3. Design)111 561.6 R 2.5(3.1. Language)
-111 585.6 R(speci\214cation)2.5 E F0(Lik)111 601.2 Q 2.698(ea)-.1 G .498
+(ing ELF symbols \(P)111 477.6 Q(arts of an e)-.15 E -.15(xe)-.15 G
+(cuable \214le\).).15 E F1 2.5(3. Design)111 513.6 R 2.5(3.1. Language)
+111 537.6 R(speci\214cation)2.5 E F0(Lik)111 553.2 Q 2.698(ea)-.1 G .498
-.15(ny o)-2.698 H .198(ther programming language Zipp).15 F 2.699(yn)
-.1 G .199(eeds to ha)-2.699 F .499 -.15(ve a d)-.2 H .199
-(e\214ned syntax, as mentioned in the).15 F(objecti)111 613.2 Q -.15(ve)
+(e\214ned syntax, as mentioned in the).15 F(objecti)111 565.2 Q -.15(ve)
-.25 G 2.5(ss).15 G(ection of Analysis, I w)-2.5 E
(ant the language to follo)-.1 E 2.5(wal)-.25 G(isp lik)-2.5 E 2.5(es)
--.1 G(yntax.)-2.5 E 3.456(Ia)111 637.2 S .956(lso belie)-3.456 F 1.256
+-.1 G(yntax.)-2.5 E 3.456(Ia)111 589.2 S .956(lso belie)-3.456 F 1.256
-.15(ve h)-.25 H .955(igher order functions should be tak).15 F .955
(en as standard and man)-.1 F 3.455(yc)-.15 G .955(ore functions will)
--3.455 F(use them.)111 649.2 Q F1 2.5(3.1.1. Data)111 685.2 R(types)2.5
-E 2.5(3.1.1.1. Basic)111 709.2 R(types)2.5 E F0(i32 - signed inte)111
-724.8 Q(ger of size 32 bits)-.15 E 0 Cg EP
+-3.455 F(use them.)111 601.2 Q F1 2.5(3.1.1. Data)111 637.2 R(types)2.5
+E 2.5(3.1.1.1. Basic)111 661.2 R(types)2.5 E F0(i32 - signed inte)111
+676.8 Q(ger of size 32 bits)-.15 E(u32 - unsigned inte)111 700.8 Q
+(ger of size 32 bits)-.15 E(i64 - signed inte)111 724.8 Q
+(ger of size 64 bits)-.15 E 0 Cg EP
%%Page: 13 13
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-13-)297.67 48 Q(u32 - unsigned inte)111 84 Q
-(ger of size 32 bits)-.15 E(i64 - signed inte)111 108 Q
-(ger of size 64 bits)-.15 E(u64 - unsigned inte)111 132 Q
-(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 1.005
-(generic - should be a)111 255.6 R -.2(vo)-.2 G 1.005(ided, remo).2 F
+/F0 10/Times-Roman@0 SF(-13-)297.67 48 Q(u64 - unsigned inte)111 84 Q
+(ger of size 64 bits)-.15 E(char - single ascii code)111 108 Q
+(\215oat - standard C \215oat)111 132 Q/F1 10/Times-Bold@0 SF 2.5
+(3.1.1.2. Adv)111 168 R(anced types)-.1 E F0
+(function - a function that can be used)111 183.6 Q 1.005
+(generic - should be a)111 207.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
+(alues to functions)-.25 F(will cause man)111 219.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 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
+255.6 R F0(Arrays can be sho)111 271.2 Q 2.5(wl)-.25 G(ik)-2.5 E 2.5(es)
+-.1 G(o:)-2.5 E(x:type[])111 295.2 Q -.4(Wi)111 319.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 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
+(All arrays are dynamic, represented by a link)111 343.2 Q
+(ed list on the back end.)-.1 E F1 2.5(3.1.1.3.1. Strings)111 367.2 R F0
+(Strings, lik)111 382.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 418.8 R(in functions)
+2.5 E 2.5(3.1.2.1. defun)111 442.8 R F0
+(\(defun a:type b:type returntype)111 458.4 Q(...)131 470.4 Q(...)131
+482.4 Q(\))111 506.4 Q .398(Returns a function that tak)111 530.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 .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
+(type.)111 542.4 Q F1 2.5(3.1.2.2. let)111 578.4 R F0(\(let x:type v)111
+594 Q(alue\))-.25 E(Creates constant x of type type to v)111 618 Q
+(alue.)-.25 E F1 2.5(3.1.2.3. set)111 654 R F0(\(set x:type v)111 669.6
+Q(alue\))-.25 E(Creates/recreates the v)111 693.6 Q(ariable v)-.25 E
+(alue of x to v)-.25 E(alue.)-.25 E F1 2.5(3.1.2.4. if/elif/else)111
+729.6 R 0 Cg EP
%%Page: 14 14
%%BeginPageSetup
BP
%%EndPageSetup
-/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
+/F0 10/Times-Roman@0 SF(-14-)297.67 48 Q(\(if condition function\))111
+84 Q(\(elif condition function\))111 108 Q(\(else function\))111 132 Q
+(Ex)111 168 Q(ecutes the function pro)-.15 E
+(vided if the condition is true.)-.15 E(Elif w)111 192 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 267.6 Q -.15(xe)
+(vious if statement is f)-.25 E(alse.)-.1 E(Else e)111 216 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.5. f)111 303.6 R(or)-.25 E F0
-(\(for i \(condition\) function\))111 319.2 Q
+-.1 E/F1 10/Times-Bold@0 SF 2.5(3.1.2.5. f)111 252 R(or)-.25 E F0
+(\(for i \(condition\) function\))111 267.6 Q
(Runs the function while the condition is true, and increments i e)111
-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
+291.6 Q -.15(ve)-.25 G(ry time the function is called.).15 E F1 2.5
+(3.1.2.6. while)111 327.6 R F0(\(while condition function\))111 343.2 Q
+(Runs the function if the condition is true, k)111 367.2 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
+403.2 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
+418.8 Q .763(Returns a function that tak)111 442.8 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
+(the \214le path of the elf.)111 454.8 Q F1(3.1.2.7.1.)111 478.8 Q 2.5
+(3.1.2.8. Arithmetic)111 514.8 R(operations)2.5 E F0(Simple operations)
+111 530.4 Q(\(+ a b\) returns a + b)111 554.4 Q(\(- a b\) returns a - b)
+111 578.4 Q(\(* a b\) returns a * b)111 602.4 Q(\(/ a b\) returns a / b)
+111 626.4 Q F1 2.5(3.1.2.9. Comparison)111 662.4 R F0
+(All return true or f)111 678 Q(alse)-.1 E(\(= a b\) returns if a = b)
+111 702 Q(\(!= a b\) returns if a != b)111 726 Q 0 Cg EP
%%Page: 15 15
%%BeginPageSetup
BP
%%EndPageSetup
-/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
+/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/F1 10/Times-Bold@0 SF
+2.5(3.1.2.10. cast)111 192 R F0(\(cast a:generic type:char[]\))111 207.6
+Q(returns a b)111 231.6 Q(ut cast to data type type, which is a string.)
+-.2 E F1 2.5(3.1.2.11. typeof)111 267.6 R F0(\(typeof a:generic\))111
+283.2 Q(returns in a string the type that v)111 307.2 Q(ariable A is.)
+-.25 E F1 2.5(3.1.2.12. terminate)111 343.2 R F0
+(\(terminate error:error\))111 358.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 -.15(ex)111 702 S(it).15 E(return)111 726 Q 0 Cg EP
+382.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 418.8 R(etur)-.18 E(n)-.15 E F0
+(\(return a:type\))111 434.4 Q(Must be used in defun, returns "a" from \
+the function, "a" must be of the functions return type.)111 458.4 Q F1
+2.5(3.1.3. List)111 494.4 R(of k)2.5 E(eyw)-.1 E(ords)-.1 E F0(defun)111
+510 Q(for)111 534 Q(while)111 558 Q(if)111 582 Q(elif)111 606 Q(else)111
+630 Q -.15(ex)111 654 S(it).15 E(return)111 678 Q(symbol)111 702 Q(set)
+111 726 Q 0 Cg EP
%%Page: 16 16
%%BeginPageSetup
BP
%%EndPageSetup
-/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. Memory)111 168 R
-(management)2.5 E F0 .54(Memory will be allocated when a v)111 183.6 R
-.54(ariable is initialized, and freed when the program stops.)-.25 F
-(Al-)5.54 E(though this isn')111 195.6 Q 2.5(tt)-.18 G(he f)-2.5 E
+/F0 10/Times-Roman@0 SF(-16-)297.67 48 Q(let)111 84 Q/F1 10/Times-Bold@0
+SF 2.5(3.2. Memory)111 120 R(management)2.5 E F0 .54
+(Memory will be allocated when a v)111 135.6 R .54
+(ariable is initialized, and freed when the program stops.)-.25 F(Al-)
+5.54 E(though this isn')111 147.6 Q 2.5(tt)-.18 G(he f)-2.5 E
(astest method, it is simple and has less runtime o)-.1 E -.15(ve)-.15 G
-(rhead.).15 E F1 2.5(3.3. Questionnair)111 231.6 R 2.5(e2f)-.18 G
-(or Rayn M)-2.75 E 2.5(3.3.1. Ho)111 255.6 R 2.5(wd)-.1 G 2.5(oy)-2.5 G
+(rhead.).15 E F1 2.5(3.3. Questionnair)111 183.6 R 2.5(e2f)-.18 G
+(or Rayn M)-2.75 E 2.5(3.3.1. Ho)111 207.6 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 271.2 R F0 3.245(-Il)3.305
+/Times-Italic@0 SF .745(\(5-6 points\))111.08 223.2 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 283.2 Q -.15(ve)-.25 G 3.284(lp).15 G .783
+(w)-.25 E(le)111 235.2 Q -.15(ve)-.25 G 3.284(lp).15 G .783
(erformance this will ha)-3.284 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 .783(he procedural approach,)-3.283 F(with the function rob)
-111 295.2 Q(ustness - I dislik)-.2 E 2.5(et)-.1 G(he brack)-2.5 E(ets!)
--.1 E F1 2.5(3.3.2. Response)111 319.2 R F0 .103
-(Although he does dislik)111 334.8 R 2.603(es)-.1 G .103
+111 247.2 Q(ustness - I dislik)-.2 E 2.5(et)-.1 G(he brack)-2.5 E(ets!)
+-.1 E F1 2.5(3.3.2. Response)111 271.2 R F0 .103
+(Although he does dislik)111 286.8 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 .863(will k)111 346.8 R
+(hem to be core parts of the language so I).15 F .863(will k)111 298.8 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 358.8 Q(Ho)111 382.8 Q(we)
+(the language due to its abstract syntax.)111 310.8 Q(Ho)111 334.8 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
-406.8 Q -.15(ey)-.1 G -.1(wo).15 G(rd list is as \215o).1 E(ws:)-.25 E
-(defun)111 430.8 Q(for)111 454.8 Q(while)111 478.8 Q(if)111 502.8 Q
-(elif)111 526.8 Q(else)111 550.8 Q -.15(ex)111 574.8 S(it).15 E(return)
-111 598.8 Q(symbol)111 622.8 Q(set)111 646.8 Q(let)111 670.8 Q F1 2.5
-(3.4. What)111 706.8 R(language do y)2.5 E(ou use to mak)-.25 E 2.5(eap)
+358.8 Q -.15(ey)-.1 G -.1(wo).15 G(rd list is as \215o).1 E(ws:)-.25 E
+(defun)111 382.8 Q(for)111 406.8 Q(while)111 430.8 Q(if)111 454.8 Q
+(elif)111 478.8 Q(else)111 502.8 Q -.15(ex)111 526.8 S(it).15 E(return)
+111 550.8 Q(symbol)111 574.8 Q(set)111 598.8 Q(let)111 622.8 Q F1 2.5
+(3.4. What)111 658.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 722.4 R 2.84(yw)-.1 G .34
+(As mentioned before Zipp)111 674.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 0 Cg EP
+(yi)-.1 G 2.84(tself. I)-2.84 F(will try and k)111 686.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.4.1. What)111 722.4 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(will try and k)111 84 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 10/Times-Bold@0 SF 2.5
-(3.4.1. What)111 120 R(is C?)2.5 E F0 3.027(Cw)111 135.6 S .527
+/F0 10/Times-Roman@0 SF(-17-)297.67 48 Q 3.027(Cw)111 84 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 147.6 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
+(ep)-.1 G(rogram-)-3.026 E .067(ming lo)111 96 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 159.6
-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 171.6 Q .377
+(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 120 Q .377
(The language quickly caught on outside of bell labs after more a)111
-195.6 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 207.6 R
-.102(as found to be able to do all the things that you could do in)-.1 F
-(ASM ho)111 219.6 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.4.2. Wh)111 255.6 R 2.5(yi)-.15 G
-2.5(sC)-2.5 G(?)-2.5 E F0 .469(As mentioned C can do an)111 271.2 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 283.2 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 295.2 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 307.2 R .159
+144 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 156 R .102
+(as found to be able to do all the things that you could do in)-.1 F
+(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.4.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.969(ea)-.1 G(d-)-2.969 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 .239
+(can ri)111 243.6 R -.25(va)-.25 G 2.739(lt).25 G .239(he performance o\
+f handwritten ASM \(often beating it if you enable compiler optimisa-)
+-2.739 F .159(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 .158
-(nd all programming languages, where)-2.659 F(speed is k)111 319.2 Q
+(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.4.3. Ho)111 355.2 R 2.5(wi)-.1
-G 2.5(sC)-2.5 G(?)-2.5 E F0 3.214(Ci)111 370.8 S 3.214(sc)-3.214 G .714
+-.2 G(ilable are present.).25 E F1 2.5(3.4.3. Ho)111 303.6 R 2.5(wi)-.1
+G 2.5(sC)-2.5 G(?)-2.5 E F0 3.214(Ci)111 319.2 S 3.214(sc)-3.214 G .714
(ompiled to ASM, the main compilers a)-3.214 F -.25(va)-.2 G .715
(ilable are clang, gcc and MSVC, I will be using).25 F
-(gcc as it is generally standard in linux en)111 382.8 Q(vironments.)-.4
-E(Man)111 406.8 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.709(yb)-.15 G .209(uild systems are a)-2.909 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 418.8 Q
+G .209(nd gnu mak)-2.709 F .208(e. Both of them)-.1 F(ha)111 367.2 Q
.851 -.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 430.8 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.4.4. Libraries)111 466.8 R F0
-(The libraries I will use are the follo)111 482.4 Q(wing:)-.25 E 2.5(Cs)
-111 506.4 S(tdlib)-2.5 E 2.5(Cu)111 530.4 S(nistd)-2.5 E 2.5(Ce)111
-554.4 S(rrno)-2.5 E(Unix de)111 578.4 Q(vice \214les)-.25 E(Zipp)111
-602.4 Q 2.5(ys)-.1 G(trings)-2.5 E(Zipp)111 626.4 Q 2.5(yg)-.1 G(raphs)
--2.5 E(Zipp)111 650.4 Q 2.5(ys)-.1 G(orts)-2.5 E
-(Addition libraries \(may not be implemented\):)111 674.4 Q(Raylib)111
-698.4 Q 2.5(Cs)111 722.4 S(ock)-2.5 E(ets + Zipp)-.1 E 2.5(ys)-.1 G(ock)
--2.5 E(ets)-.1 E 0 Cg EP
+(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.4.4. Libraries)111 415.2 R F0
+(The libraries I will use are the follo)111 430.8 Q(wing:)-.25 E 2.5(Cs)
+111 454.8 S(tdlib)-2.5 E 2.5(Cu)111 478.8 S(nistd)-2.5 E 2.5(Ce)111
+502.8 S(rrno)-2.5 E(Unix de)111 526.8 Q(vice \214les)-.25 E(Zipp)111
+550.8 Q 2.5(ys)-.1 G(trings)-2.5 E(Zipp)111 574.8 Q 2.5(yg)-.1 G(raphs)
+-2.5 E(Zipp)111 598.8 Q 2.5(ys)-.1 G(orts)-2.5 E
+(Addition libraries \(may not be implemented\):)111 622.8 Q(Raylib)111
+646.8 Q 2.5(Cs)111 670.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.4.5. Modularization)111 706.8 R F0 2.062 -.8
+(To m)111 722.4 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 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.4.5. Modularization)111 84 R F0 2.062 -.8(To m)111 99.6 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 111.6 Q
-(The \214le layout looks as follo)111 135.6 Q(ws:)-.25 E(PLA)111 159.6 Q
-(CE HERE)-.4 E .712(As you can see this is split up o)111 183.6 R -.15
-(ve)-.15 G 3.212(ra).15 G .713
+/F0 10/Times-Roman@0 SF(-18-)297.67 48 Q
+(coming impossible to edit code.)111 84 Q
+(The \214le layout looks as follo)111 108 Q(ws:)-.25 E(PLA)111 132 Q
+(CE HERE)-.4 E .712(As you can see this is split up o)111 156 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 195.6 Q
-(eep e)-.1 E -.15(ve)-.25 G(rything as easy to manage as possible.).15 E
-.562(This le)111 219.6 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
+-.15(ve)-.15 G(r).15 E(~500 lines of code. This is to k)111 168 Q(eep e)
+-.1 E -.15(ve)-.25 G(rything as easy to manage as possible.).15 E .562
+(This le)111 192 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
(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 231.6 Q
+(ithout it, \214les will be-)-3.062 F(come a mess that can')111 204 Q
2.5(tb)-.18 G 2.5(ew)-2.5 G(ork)-2.6 E(ed with.)-.1 E .041(All .c \214l\
es will be compiled into .o \214les, then the .o \214les can be link)111
-255.6 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 267.6 Q -.15(xe)
--.15 G(cutable.).15 E F1 2.5(3.4.5.1. Build)111 315.6 R(system)2.5 E F0
-1.221(The entire project is being b)111 331.2 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 343.2 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 \
-project 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 355.2 Q(Example of mak)111 379.2 Q
-(e:)-.1 E(mak)111 403.2 Q 2.5(e-)-.1 G(j2)-2.5 E(This will b)111 427.2 Q
-(uild all \214les speci\214ed by 'Mak)-.2 E(e\214le' with 2 threads.)-.1
-E .34(The project should be b)111 451.2 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 463.2 Q
+228 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 240 Q -.15(xe)
+-.15 G(cutable.).15 E/F1 10/Times-Bold@0 SF 2.5(3.4.5.1. Build)111 288 R
+(system)2.5 E F0 1.221(The entire project is being b)111 303.6 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 315.6 Q 1.003 -.15(ve i)
+-.2 H .703(ts o).15 F .703(wn mak)-.25 F .704(e\214le. This will mean t\
+he entire project 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 327.6 Q(Example of mak)
+111 351.6 Q(e:)-.1 E(mak)111 375.6 Q 2.5(e-)-.1 G(j2)-2.5 E(This will b)
+111 399.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 423.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 435.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 487.2 Q F1
-2.5(3.5. T)111 523.2 R(ime table)-.18 E F0 .174
-(The \214rst step is to tackle the interpreter)111 538.8 R 2.674(,s)-.4
+try compiling with clang and tcc, to compare performance.)111 459.6 Q F1
+2.5(3.5. T)111 495.6 R(ime table)-.18 E F0 .174
+(The \214rst step is to tackle the interpreter)111 511.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 550.8 R -.15
-(xe)-.15 G .597(cute Zipp).15 F(y)-.1 E(code ho)111 562.8 Q(we)-.25 E
+ \214nished, after this point you should be able to e)111 523.2 R -.15
+(xe)-.15 G .597(cute Zipp).15 F(y)-.1 E(code ho)111 535.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 586.8 R .124(xt step is zp)-.15 F .125
+-2.5 E .124(The ne)111 559.2 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 598.8
+(his should be ran before code is shipped)-2.625 F(to the user)111 571.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 622.8 R 3.216(ez)-.1 G -.1(py)-3.216 G .716
+(Finally I need to mak)111 595.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 634.8 Q 2.5(wb)-.25 G
+2.016 -.65(y, a)-.1 H .716(nd a).65 F(fe)111 607.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 658.8 Q(ws it is at this point that I will write a Raylib library a\
+111 631.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(3.6. Flo)111
-694.8 R 2.5(wt)-.1 G(hr)-2.5 E(ough the system)-.18 E F0 1.403
-(The alogrithum to run code is quite comple)111 710.4 R 3.903(xh)-.15 G
+667.2 R 2.5(wt)-.1 G(hr)-2.5 E(ough the system)-.18 E F0 1.403
+(The alogrithum to run code is quite comple)111 682.8 R 3.903(xh)-.15 G
-.25(ow)-3.903 G -2.15 -.25(ev e).25 H 3.903(ri).25 G 3.903(tc)-3.903 G
1.403(an be boiled do)-3.903 F 1.403(wn to a fe)-.25 F 3.903(ws)-.25 G
-(imple)-3.903 E(steps:)111 722.4 Q 0 Cg EP
+(imple)-3.903 E(steps:)111 694.8 Q F1 -.18(re)111 718.8 S
+(ad the text \214le \(strip line br).18 E(eaks and tabs\))-.18 E 0 Cg EP
%%Page: 19 19
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF(-19-)297.67 48 Q/F1 10/Times-Bold@0 SF -.18(re)
-111 84 S .263(ad the text \214le \(strip line br).18 F .263
-(eaks and tabs\) cr)-.18 F .263(eate an empty link)-.18 F .263
-(ed list get the \214rst expr)-.1 F(es-)-.18 E .026(sion fr)111 96 R
-.026(om the text \214le \(with be encapsulated with)-.18 F F0(\(\)"")
-2.526 E F1 .026(get the function call and its ar)2.526 F .027(gs into a)
--.1 F(tok)111 108 Q .232(en if the ar)-.1 F .231
-(guments of the function ar)-.1 F 2.731(et)-.18 G(her)-2.731 E 2.731(eo)
--.18 G .231(wn function call, then con)-2.831 F -.1(ve)-.4 G .231
-(rt them into a).1 F(tok)111 120 Q .585(en set that tok)-.1 F .585
-(en as the ar)-.1 F .585(gument in the \214rst tok)-.1 F .585
-(en append the r)-.1 F .586(oot tok)-.18 F .586(en to the link)-.1 F(ed)
--.1 E .717(list r)111 132 R .717
-(epeat until the text \214le string is empty allocate memory f)-.18 F
-.716(or the pr)-.25 F .716(ogram and pr)-.18 F(epar)-.18 E(e)-.18 E .17
-(the exection step at the start of the link)111 144 R .17(ed list tra)
--.1 F -.1(ve)-.25 G .17(rse to the bottem of the tr).1 F .17
-(ee \(made of to-)-.18 F -.1(ke)111 156 S .28(ns\) execute the lo).1 F
-.28(west tok)-.1 F .279(en r)-.1 F .279(epeat until all tok)-.18 F .279
-(ens including the r)-.1 F .279(oot ha)-.18 F .479 -.1(ve b)-.25 H .279
-(een executed).1 F(mo)111 168 Q .2 -.1(ve t)-.1 H 2.5(ot).1 G
-(he next node of the link)-2.5 E(ed list r)-.1 E(epeat until the link)
--.18 E(ed list is empty)-.1 E F0 -.4(Wi)111 192 S .482
-(thin each of these steps is man).4 F 2.982(ys)-.15 G .483
-(maller steps. The hardest part will be making the tok)-2.982 F .483
-(ens, as)-.1 F .45(this requires alot of string manipultation. The e)111
-204 R -.15(xe)-.15 G .45(cution will be a recursi).15 F .75 -.15(ve a)
--.25 H .45(logrithum. All trees).15 F
-(will be represented via structs \(see section on AST')111 216 Q(s\).)
--.55 E(PUT SOME FLO)111 240 Q 2.5(WC)-.35 G(HAR)-2.5 E(TS HERE)-.6 E F1
-2.5(4. T)111 276 R(echnical Solution)-.92 E 2.5(5. T)111 300 R(esting)
--.92 E 2.5(6. Ev)111 324 R(aluation)-.1 E 0 Cg EP
+/F0 10/Times-Roman@0 SF(-19-)297.67 48 Q/F1 10/Times-Bold@0 SF(cr)111 84
+Q(eate an empty link)-.18 E(ed list)-.1 E .934(get the \214rst expr)111
+99.6 R .934(ession fr)-.18 F .933
+(om the text \214le \(with be encapsulated with)-.18 F F0("\(\)"")3.433
+E F1 .933(get the function)3.433 F(call and its ar)111 111.6 Q
+(gs into a tok)-.1 E(en)-.1 E(if the ar)111 127.2 Q
+(guments of the function ar)-.1 E 2.5(et)-.18 G(her)-2.5 E 2.5(eo)-.18 G
+(wn function call, then)-2.6 E F0(con)2.5 E -.15(ve)-.4 G
+(rt them into a tok).15 E(en")-.1 E F1(set that tok)111 142.8 Q
+(en as the ar)-.1 E(gument in the \214rst tok)-.1 E(en)-.1 E
+(append the r)111 158.4 Q(oot tok)-.18 E(en to the link)-.1 E(ed list)
+-.1 E -.18(re)111 174 S(peat until the text \214le string is empty).18 E
+(allocate memory f)111 189.6 Q(or the pr)-.25 E(ogram and pr)-.18 E
+(epar)-.18 E 2.5(et)-.18 G(he exection step)-2.5 E
+(at the start of the link)111 205.2 Q(ed list tra)-.1 E -.1(ve)-.25 G
+(rse to the bottem of the tr).1 E(ee)-.18 E F0(\(made of tok)2.5 E
+(ens\)")-.1 E F1(execute the lo)111 220.8 Q(west tok)-.1 E(en)-.1 E -.18
+(re)111 236.4 S(peat until all tok).18 E(ens including the r)-.1 E
+(oot ha)-.18 E .2 -.1(ve b)-.25 H(een executed).1 E(mo)111 252 Q .2 -.1
+(ve t)-.1 H 2.5(ot).1 G(he next node of the link)-2.5 E(ed list)-.1 E
+-.18(re)111 267.6 S(peat until the link).18 E(ed list is empty)-.1 E F0
+-.4(Wi)111 295.2 S .482(thin each of these steps is man).4 F 2.982(ys)
+-.15 G .483(maller steps. The hardest part will be making the tok)-2.982
+F .483(ens, as)-.1 F .45
+(this requires alot of string manipultation. The e)111 307.2 R -.15(xe)
+-.15 G .45(cution will be a recursi).15 F .75 -.15(ve a)-.25 H .45
+(logrithum. All trees).15 F
+(will be represented via structs \(see section on AST')111 319.2 Q(s\).)
+-.55 E(PUT SOME FLO)111 343.2 Q 2.5(WC)-.35 G(HAR)-2.5 E(TS HERE)-.6 E
+F1 2.5(4. T)111 379.2 R(echnical Solution)-.92 E 2.5(5. T)111 403.2 R
+(esting)-.92 E 2.5(6. Ev)111 427.2 R(aluation)-.1 E 0 Cg EP
%%Trailer
end
%%EOF
diff --git a/comp/lucas-standen-NEA/writeup/make.sh b/comp/lucas-standen-NEA/writeup/make.sh
index 070f739..8b79b7a 100755
--- a/comp/lucas-standen-NEA/writeup/make.sh
+++ b/comp/lucas-standen-NEA/writeup/make.sh
@@ -1,6 +1,8 @@
#!/bin/bash
for i in $(ls | grep .ms); do
+ fmt -w80 -s coverpage.ms > shortend.ms
+ mv shortend.ms coverpage.ms
groff -ms $i -e -Tps > $(echo $i | cut -f1 -d".").ps
ps2pdf $(echo $i | cut -f1 -d".").ps
diff --git a/comp/lucas-standen-NEA/writeup/questions-for-amy.ps b/comp/lucas-standen-NEA/writeup/questions-for-amy.ps
index eaa8d07..19e1717 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: Thu Jun 20 12:51:10 2024
+%%CreationDate: Thu Jul 4 09:06:36 2024
%%DocumentNeededResources: font Times-Bold
%%+ font Times-Roman
%%DocumentSuppliedResources: procset grops 1.23 0