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