/
delvs.rb
71 lines (58 loc) · 1.28 KB
/
delvs.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env ruby
# NOTE: this proram was just made for the lulz, PLEASE DO NOT USE THIS
# Please use the actually semi-well written delvs interpreter writtin in C, because this isn't even close to the actual delvs interpreter
require 'io/console'
class RuntimeData
attr_accessor :c
attr_accessor :v
attr_accessor :i
attr_accessor :f
attr_accessor :p
def initialize
@c = ""
@i = 0
@v = Array.new 30000, 0
@p = 15000
@f = ""
end
end
def dummy_lexer d
while d.i <= d.c.length do
return d.i if d.c[d.i] == ']'
d.i += 1
end
end
def lexer d
while d.i <= d.c.length do
case d.c[d.i]
when '>' then
d.p += 1
when '<' then
d.p -= 1
when '+' then
d.v[d.p] += 1
when '-' then
d.v[d.p] -= 1
when '.' then
print d.v[d.p].chr
when ',' then
d.v[d.p] = IO.console.getch.ord
when '[' then
r = d.i + 1
d.i = dlexer d if !d.v[d.p]
while d.v[d.p] != 0 do
d.i = r
d = lexer d
end
when ']' then
return d
else
# Everything else is comments
end
d.i += 1
end
end
# example usage:
# data = RuntimeData.new
# data.c = "+++++ +++++ [ > +++++ +++++ > + << - ] > ++++ . + . > ."
# lexer data