diff --git a/examples/do.slc b/examples/do.slc new file mode 100644 index 0000000..224ece5 --- /dev/null +++ b/examples/do.slc @@ -0,0 +1,26 @@ +/* +Parses this: + + do { + ...code... + } (...cond...) + +Into this: + + ...code... + while(...cond...) { + ...code... + } +*/ + +// -> [bytecodes] +::builtin do @body + "" parseblock {} // "" means no entry into the symbol table (unnamed function) - equals to 0 + do@body(.) // (.) does not removes - only (_) no need for gencode because + gen(while) // address top bit 1 when builtin from C + genopen() // equal to gencode(1) + "" parseblock () + genclose() + genopen{} + do@body + genclose{} diff --git a/examples/dup.slc b/examples/dup.slc new file mode 100644 index 0000000..0dd752c --- /dev/null +++ b/examples/dup.slc @@ -0,0 +1,4 @@ +:builtin dup @t + dup@t(_) + dup@t + dup@t diff --git a/examples/for.slc b/examples/for.slc new file mode 100644 index 0000000..8de199c --- /dev/null +++ b/examples/for.slc @@ -0,0 +1,13 @@ +::builtin for + parseword drop // TODO: error handling + "" ";" parse + gen(while) + genopen() + "" ";" parse + genclose() + genopen{} + "" ")" parse() + "" parseblock {} + swap + genclose{} +; diff --git a/examples/gen.slc b/examples/gen.slc new file mode 100644 index 0000000..f13adde --- /dev/null +++ b/examples/gen.slc @@ -0,0 +1,8 @@ +: gen + if(1 !=) { + dup 1 - + gen + } +; + +5 gen diff --git a/examples/gen_str b/examples/gen_str new file mode 100644 index 0000000..71c3bc8 --- /dev/null +++ b/examples/gen_str @@ -0,0 +1 @@ +"word_name" gen_str // -> session storage-be diff --git a/examples/if.slc b/examples/if.slc new file mode 100644 index 0000000..0556c6b --- /dev/null +++ b/examples/if.slc @@ -0,0 +1,12 @@ +// prefixed builtins with '#' +// when writing a compiler - like a c-like language + +:if + () + #asm(jz else$) + {} + #asm(jmp ifend$) + #asm(else$:) + [] + #asm(ifend$:) +; diff --git a/examples/strings.slc b/examples/strings.slc new file mode 100644 index 0000000..9ec614b --- /dev/null +++ b/examples/strings.slc @@ -0,0 +1,23 @@ +"word_name" gen_str // -> session storage-be - amúgy ez utf8 + +"abc" "df" strcon +/* + abc0 + 0004 + df00 + 0002 +*/ + +// TODO: implement as C builtin instead.. but doable this way +:builtin strcon @off1 @mod1 @ + dup + 7 + 4 / + strcon@off1(_) // (_) azt jelenti, hogy pop és változóba tesz, (.) means peek and put in var + dup + 4 % + strcon@mod1(_) + strcon@off1 + popat + + + +; diff --git a/examples/swap_builtin.slc b/examples/swap_builtin.slc new file mode 100644 index 0000000..b06c8ec --- /dev/null +++ b/examples/swap_builtin.slc @@ -0,0 +1,7 @@ +// a b -> b a +:builtin swap @tmp1 @tmp2 + swap@tmp1(_) + swap@tmp2(_) + swap@tmp1 + swap@tmp2 +; diff --git a/examples/variable.slc b/examples/variable.slc new file mode 100644 index 0000000..a5cad28 --- /dev/null +++ b/examples/variable.slc @@ -0,0 +1,2 @@ +: player_data @xpos @ypos @health +;