Skip to content

Commit

Permalink
Merge pull request #29 from ujjwal-kr/experimental-3.1
Browse files Browse the repository at this point in the history
3.1
  • Loading branch information
ujjwal-kr authored May 27, 2023
2 parents e1c9d56 + 2c42f72 commit 11da138
Show file tree
Hide file tree
Showing 26 changed files with 1,552 additions and 640 deletions.
54 changes: 26 additions & 28 deletions ex.ram
Original file line number Diff line number Diff line change
@@ -1,31 +1,29 @@
main:
ram nums :vec :int = [12, 22, 14, 10000]
ram largest :int = 0
vec largest = nums[0]
ram i :int = 0
ram curr :int = 0
jmp a:
ram i :int = 0
jmp ok:

a:
vec curr = nums[i]
ram 1
add i
ram lx prev
copy i = lx
copy lx = curr
ram lx
copy lx = largest
ram lx
cmp
jgr swap:
copy lx = i
ram lx
vec nums len
cmp
jne a:
print var largest
halt
ok:
ram lx 1
add i lx
ram lx prev
copy i = lx
ram v8 :map
insert v8 { "hp": 3000 }
insert v8 { "meow": 3000 }
insert v8 { "omk": "3000" }

ram car :map
insert car { "name": "d" }
insert car { "engine": v8 }

ram lx
ram 500000000
cmp
je halt:
drop car
jmp ok:

halt:
dbg
halt

swap:
copy largest = curr
ret
51 changes: 51 additions & 0 deletions examples/deep_map.ram
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
main:
ram x :map

ram y :map
insert x { "randstring": y }

ram z :map
insert z { "randstring1": x }

ram a :map
insert a { "randstring2": z }

ram b :map
insert b { "randstring3": a }

ram c :map
insert c { "randstring4": b }

ram d :map
insert d { "randstring5": c }

ram e :map
insert e { "randstring6": d }

ram f :map
insert f { "randstring7": e }

ram g :map
insert g { "randstring8": f }

ram h :map
insert h { "randstring9": g }

ram i :map
insert i { "randstring10": h }

ram j :map
insert j { "randstring11": i }

ram k :map
insert k { "randstring12": j }

ram l :map
insert l { "randstring13": k }

ram m :map
insert m { "randstring14": l }

ram n :map
insert n { "randstring15": m }
dbg
112 changes: 100 additions & 12 deletions examples/interpreter/interpreter.ram
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
include "examples/interpreter/parser.ram"
include "examples/interpreter/var.ram"
include "examples/interpreter/jump.ram"

main:
ram labelMap :map
ram stack :vec :int = []
ram callstask :vec :int = []
ram vars_int :map
ram vars_str :map
ram i :int = 0
ram parser_ip :int = 0
ram pc :int = 0
ram lxstring = "./examples/interpreter/test.txt"
stdfs open lxstring = string
ram program :vec :str = []
Expand All @@ -9,29 +19,31 @@ main:
vec program len
ram lx prev
copy plen = lx
jmp main_loop:
ram instructions :vec :str = []
jmp parser_loop:
jmp program_loop:
halt

main_loop:
program_loop:
ram statement :str = ""
vec statement = program[i]
vec statement = instructions[pc]
jmp match:

ram lx 1
add i lx
add lx pc
ram lx prev
copy i = lx

jmp match:
copy pc = lx

cmp plen i
jne main_loop:
cmp pc parser_ip
jne program_loop:
ret

match:
ram matchstr :str = ""
ram cmd :vec :str = []
split statement > " " = cmd
vec matchstr = cmd[0]
trim matchstr

ram string = "push"
cmp string matchstr
Expand All @@ -41,6 +53,10 @@ match:
cmp string matchstr
je print:

ram string = "println"
cmp string matchstr
je println:

ram string = "add"
cmp string matchstr
je add:
Expand All @@ -61,17 +77,72 @@ match:
cmp string matchstr
je pop:

ram string = "halt"
cmp string matchstr
je halt:

ram string = "var"
cmp string matchstr
je var:

ram string = "cmp"
cmp string matchstr
je cmp:

ram string = "jmp"
cmp string matchstr
je jmp:

ram string = "je"
cmp string matchstr
je je:

ram string = "jne"
cmp string matchstr
je jne:

ram string = "jgr"
cmp string matchstr
je jgr:

ram string = "jsm"
cmp string matchstr
je jsm:

ram string = "ret"
cmp string matchstr
je ret:

ret

push:
vec cmd len
ram 2
cmp
jgr push_var:
vec cmd len
ram 2
cmp
je push_int:
ret

push_var:
ram v_name :str = ""
vec v_name = cmd[2]
ram v_value :int = 0
get vars_int v_name = v_value
copy lx = v_value
vec stack push lx
drop v_name
drop v_value
ret

push_int:
ram numstr :str = ""
vec numstr = cmd[1]
parse numstr :int
vec stack push lx
vec stack push lx
drop numstr
ret

pop:
Expand All @@ -86,6 +157,14 @@ print:
ram num :int = 0
vec num = stack[lx]
print var num
vec stack pop
drop num
ret

println:
vec cmd shift
join cmd > " " = string
print var string
ret

get_last_two:
Expand All @@ -101,22 +180,31 @@ get_last_two:
sub
ram lx prev
vec n2 = stack[lx]
vec stack pop
vec stack pop
ret

add:
jmp get_last_two:
add n1 n2
ram lx prev
vec stack push lx
drop n1
drop n2
ret

sub:
jmp get_last_two:
sub n2 n1
ram lx prev
vec stack push lx
drop n1
drop n2
ret

halt:
halt

cmp:
jmp get_last_two:

Expand All @@ -128,7 +216,8 @@ cmp:

cmp n2 n1
jsm cmp_sm:

drop n1
drop n2
ret

cmp_gr:
Expand All @@ -142,7 +231,6 @@ cmp_je:
ret

cmp_sm:
print smol
ram lx -1
vec stack push lx
ret
Loading

0 comments on commit 11da138

Please sign in to comment.