diff options
Diffstat (limited to 'l')
-rw-r--r-- | l/arrays.lang | 7 | ||||
-rw-r--r-- | l/bf.lang | 104 | ||||
-rw-r--r-- | l/chaincond.lang | 14 | ||||
-rw-r--r-- | l/chartest.lang | 19 | ||||
-rw-r--r-- | l/compare.lang | 10 | ||||
-rw-r--r-- | l/dupifs.lang | 8 | ||||
-rw-r--r-- | l/fibo.lang | 31 | ||||
-rw-r--r-- | l/opttest.lang | 8 | ||||
-rw-r--r-- | l/primes.bf | 194 | ||||
-rw-r--r-- | l/putint.lang | 4 | ||||
-rw-r--r-- | l/putstr.lang | 19 | ||||
-rw-r--r-- | l/strlen.lang | 11 | ||||
-rw-r--r-- | l/struct.lang | 34 | ||||
-rw-r--r-- | l/test.lang | 20 |
14 files changed, 483 insertions, 0 deletions
diff --git a/l/arrays.lang b/l/arrays.lang new file mode 100644 index 0000000..8cab05f --- /dev/null +++ b/l/arrays.lang @@ -0,0 +1,7 @@ +func int main() { + int[] arr := new int[5]; + arr[0] = 97; + arr[1] = 98; + putc(char(arr[0])); + return 0; +} diff --git a/l/bf.lang b/l/bf.lang new file mode 100644 index 0000000..0ce6389 --- /dev/null +++ b/l/bf.lang @@ -0,0 +1,104 @@ +type byte := char; + +func putstr(char[] str) { + int i := 0; + while (str[i] != '\0') { + putc(str[i]); + i = i + 1; + } +} + +func int[] makejumpmap(char[] src, int srclen) { + int[] jm := new int[srclen]; + int[] stack := new int[srclen]; + int stkp := 0; + int i := 0; + while (i < srclen) { + // putint(i); putc(' '); putint(stkp); putc(' '); putc(src[i]); putc('\n'); + if (src[i] == '[') { + stack[stkp] = i; + stkp = stkp + 1; + } + if (src[i] == ']') { + stkp = stkp - 1; + int j := stack[stkp]; + jm[i] = j; + jm[j] = i; + } + i = i + 1; + } + if (stkp != 0) { + putstr("Unmatched opening brackets in BF source\n"); + exit(1); + } + /*i = 0; + while (i < srclen) { + putint(jm[i]); + putc(' '); + i = i + 1; + } + putc('\n');*/ + return jm; +} + +func interpret(char[] src, int srclen) { + int[] jm := makejumpmap(src, srclen); + byte[] mem := new char[4088]; + int ip := 0; + int memp := 0; + while (src[ip] != '\0') { + // putint(ip); putc('\n'); + char c := src[ip]; + if (c == '+') {mem[memp] = mem[memp] + byte(1);} + if (c == '-') {mem[memp] = mem[memp] - byte(1);} + if (c == '>') {memp = memp + 1;} + if (c == '<') {memp = memp - 1;} + if (c == '.') {putc(mem[memp]);} + if (c == ',') {mem[memp] = byte(getc());} + if (c == '[') { + if (mem[memp] == '\0') { + ip = jm[ip]; + } + } + if (c == ']') { + if (mem[memp] != '\0') { + ip = jm[ip]; + } + } + ip = ip + 1; + } + + // debugger; + + putc('\n'); + memp = 0; + while (memp < 10) { + putint(int(mem[memp]) & 0xff); putc(' '); + memp = memp + 1; + } + putc('\n'); +} + +func int main() { + int bufsize := 12280; + char[] source := new char[12280]; + + int sourcelen := 0; + while (1) { + int c := getc(); + // putc(char(c)); + if (c < 0) { + break; + } else { + source[sourcelen] = char(c); + sourcelen = sourcelen + 1; + if (sourcelen >= bufsize - 1) { + break; + } + } + } + source[sourcelen] = '\0'; + + interpret(source, sourcelen); + return 0; +} diff --git a/l/chaincond.lang b/l/chaincond.lang new file mode 100644 index 0000000..542cae9 --- /dev/null +++ b/l/chaincond.lang @@ -0,0 +1,14 @@ +func int main() { + int a := 0; + if (a == 0) { + a = 1; + } else { + a = 2; + } + if (a > 0) { + a = 10; + } else { + a = 20; + } + return a; +}
\ No newline at end of file diff --git a/l/chartest.lang b/l/chartest.lang new file mode 100644 index 0000000..208bcab --- /dev/null +++ b/l/chartest.lang @@ -0,0 +1,19 @@ +int glob := 42; + +func f(char x) { + putc(x); +} + +func char g() { + return '\n'; +} + +func int main() { + char c := 'a'; + f(c); + putc('\n'); + char d := g(); + c = d + d + d + d + d + d + d + d + 'a'; + putc(c); + return 0; +} diff --git a/l/compare.lang b/l/compare.lang new file mode 100644 index 0000000..1de9a70 --- /dev/null +++ b/l/compare.lang @@ -0,0 +1,10 @@ +func int main() { + int i := 0; + while (i != 10) { + if (i == 5) { + i = i + 2; + } + i = i + 1; + } + return 0; +} diff --git a/l/dupifs.lang b/l/dupifs.lang new file mode 100644 index 0000000..91e7ca4 --- /dev/null +++ b/l/dupifs.lang @@ -0,0 +1,8 @@ +func int main() { + int c := getc(); + int i := 0; + if (c == 97) {i = 1;} + if (c == 98) {i = 2;} + putint(i); + return 0; +} diff --git a/l/fibo.lang b/l/fibo.lang new file mode 100644 index 0000000..e1a7a4a --- /dev/null +++ b/l/fibo.lang @@ -0,0 +1,31 @@ +func printnum(int n) { + if (n == 0) {putc('0'); return;} + if (n < 0) {putc('-'); n = -n;} + while (n > 0) { + putc('0' + char(n % 10)); + n = n / 10; + } +} + +func int fibo(int n) { + int a := 0; + int b := 1; + int i := 0; + while (i < n) { + int c := a + b; + a = b; + b = c; + i = i + 1; + } + return b; +} + +func int main() { + int i := 0; + while (i <= 20) { + printnum(fibo(i)); + putc('\n'); + i = i + 1; + } + return 0; +} diff --git a/l/opttest.lang b/l/opttest.lang new file mode 100644 index 0000000..9f87e78 --- /dev/null +++ b/l/opttest.lang @@ -0,0 +1,8 @@ +func int main() { + int a := 1; + int b := 2; + int x := a + b; + b = 100; + putint(x); putc('\n'); + return 0; +} diff --git a/l/primes.bf b/l/primes.bf new file mode 100644 index 0000000..f492705 --- /dev/null +++ b/l/primes.bf @@ -0,0 +1,194 @@ +compute prime numbers +to use type the max number then push Alt 1 0 +=================================================================== +======================== OUTPUT STRING ============================ +=================================================================== +>++++++++[<++++++++>-]<++++++++++++++++.[-] +>++++++++++[<++++++++++>-]<++++++++++++++.[-] +>++++++++++[<++++++++++>-]<+++++.[-] +>++++++++++[<++++++++++>-]<+++++++++.[-] +>++++++++++[<++++++++++>-]<+.[-] +>++++++++++[<++++++++++>-]<+++++++++++++++.[-] +>+++++[<+++++>-]<+++++++.[-] +>++++++++++[<++++++++++>-]<+++++++++++++++++.[-] +>++++++++++[<++++++++++>-]<++++++++++++.[-] +>+++++[<+++++>-]<+++++++.[-] +>++++++++++[<++++++++++>-]<++++++++++++++++.[-] +>++++++++++[<++++++++++>-]<+++++++++++.[-] +>+++++++[<+++++++>-]<+++++++++.[-] +>+++++[<+++++>-]<+++++++.[-] +=================================================================== +======================== INPUT NUMBER ============================ +=================================================================== +[[[ COMMENT + + cont=1 + [ + - cont=0 + >, + ======SUB10====== + ---------- + + [ not 10 + <+> cont=1 + =====SUB38====== + ---------- + ---------- + ---------- + -------- + > + =====MUL10======= + [>+>+<<-]>>[<<+>>-]< dup + >>>+++++++++ + [ + <<< + [>+>+<<-]>>[<<+>>-]< dup + [<<+>>-] + >>- + ] + <<<[-]< + ======RMOVE1====== + < + [>+<-] + ] + < + ] + >>[<<+>>-]<< +]]] +++++++++++.[-] OUTPUT A NEWLINE +- THE INPUT NUMBER (WE DONT HAVE STDIN YET) +=================================================================== +======================= PROCESS NUMBER =========================== +=================================================================== +==== ==== ==== ==== +numd numu teid teiu +==== ==== ==== ==== +>+<- +[ + >+ + ======DUP====== + [>+>+<<-]>>[<<+>>-]< + >+<-- + >>>>>>>>+<<<<<<<< isprime=1 + [ + >+ + <- + =====DUP3===== + <[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<<< + =====DUP2===== + >[>>+>+<<<-]>>>[<<<+>>>-]<<< < + >>> + ====DIVIDES======= + [>+>+<<-]>>[<<+>>-]< DUP i=div + + << + [ + >>>>>+ bool=1 + <<< + [>+>+<<-]>>[<<+>>-]< DUP + [>>[-]<<-] IF i THEN bool=0 + >> + [ IF i=0 + <<<< + [>+>+<<-]>>[<<+>>-]< i=div + >>> + - bool=0 + ] + <<< + - DEC i + << + - + ] + + +>>[<<[-]>>-]<< + >[-]< CLR div + =====END DIVIDES==== + [>>>>>>[-]<<<<<<-] if divides then isprime=0 + << + >>[-]>[-]<<< + ] + >>>>>>>> + [ + - + <<<<<<<[-]<< + [>>+>+<<<-]>>>[<<<+>>>-]<<< + >> + =================================================================== + ======================== OUTPUT NUMBER =========================== + =================================================================== + [>+<-]> + + [ + ======DUP====== + [>+>+<<-]>>[<<+>>-]< + + + ======MOD10==== + >+++++++++< + [ + >>>+<< bool= 1 + [>+>[-]<<-] bool= ten==0 + >[<+>-] ten = tmp + >[<<++++++++++>>-] if ten=0 ten=10 + <<- dec ten + <- dec num + ] + +++++++++ num=9 + >[<->-]< dec num by ten + + =======RROT====== + [>+<-] + < [>+<-] + < [>+<-] + >>>[<<<+>>>-] + < + + =======DIV10======== + >+++++++++< + [ + >>>+<< bool= 1 + [>+>[-]<<-] bool= ten==0 + >[<+>-] ten = tmp + >[<<++++++++++>>>+<-] if ten=0 ten=10 inc div + <<- dec ten + <- dec num + ] + >>>>[<<<<+>>>>-]<<<< copy div to num + >[-]< clear ten + + =======INC1========= + <+> + ] + + < + [ + =======MOVER========= + [>+<-] + + =======ADD48======== + +++++++[<+++++++>-]<-> + + =======PUTC======= + <.[-]> + + ======MOVEL2======== + >[<<+>>-]< + + <- + ] + + >++++[<++++++++>-]<.[-] + + =================================================================== + =========================== END FOR =============================== + =================================================================== + >>>>>>> + ] + <<<<<<<< + >[-]< + [-] + <<- +] + +======LF======== + +++++++++++.[-] diff --git a/l/putint.lang b/l/putint.lang new file mode 100644 index 0000000..198b4ee --- /dev/null +++ b/l/putint.lang @@ -0,0 +1,4 @@ +func int main() { + putint(-12345678); putc('\n'); + return 0; +} diff --git a/l/putstr.lang b/l/putstr.lang new file mode 100644 index 0000000..f132bda --- /dev/null +++ b/l/putstr.lang @@ -0,0 +1,19 @@ +func putstr(char[] str) { + int i := 0; + while (str[i] != '\0') { + putc(str[i]); + i = i + 1; + } +} + +func int main() { + char[] str := new char[100]; + str[0] = 'k'; + str[1] = 'a'; + str[2] = str[1]; + str[3] = 's'; + str[4] = '\n'; + str[5] = '\0'; + putstr(str); + return 0; +} diff --git a/l/strlen.lang b/l/strlen.lang new file mode 100644 index 0000000..27c23a3 --- /dev/null +++ b/l/strlen.lang @@ -0,0 +1,11 @@ +func int strlen(char[] str) { + int i := 0; + char c := str[i]; + while (c != '\0') { + i = i + 1; + c = str[i]; + } + return i; +} + +func int main() {return 0;} diff --git a/l/struct.lang b/l/struct.lang new file mode 100644 index 0000000..00b3442 --- /dev/null +++ b/l/struct.lang @@ -0,0 +1,34 @@ +type S := struct { + int x; + char y; +}; + +S global := {x = 1, y = '!'}; + +func f(int iets1, S s, int iets2) { + putint(s.x); putc(s.y); putc('\n'); + putint(iets1); putc(' '); putint(iets2); putc('\n'); +} + +func int main() { + /*global.x = 3 * global.x + int(global.y); + putint(global.x + 1); putc(global.y); putc('\n'); + int a := getc(); + int b := getc(); + getc(); // newline + S ding := {x = 2*a, y = 'a'}; + // return ding.x; + f(123, ding, 456); + S ding2 := ding; + ding2.x = ding2.x; + // ding2.y = ding2.y; + f(234, ding2, 567); + return int(ding.y) + a + b;*/ + + int a := getc(); + getc(); // newline + S ding := {x = 2*a, y = 'a'}; + S ding2 := ding; + f(123, ding2, 456); + return 0; +} diff --git a/l/test.lang b/l/test.lang new file mode 100644 index 0000000..f03b3e3 --- /dev/null +++ b/l/test.lang @@ -0,0 +1,20 @@ +int glob := 100; + +func f() { + glob = glob + 10; +} + +func g(int x , int y) { + glob = glob + x + 2 * y; +} + +func int main() { + int i := 0; /* block /* comments */ nest! */ + // int[4] arr := 2; + i = i + 1; + f(); + if (i > 0 && i < 10) { + int i := 20; + g(i , 2 * i); + } +} |