diff delvs-master/delvs.rb @ 3122:276f475af97b

<L8D> tar xf master.tar.gz
author HackBot
date Sun, 16 Jun 2013 06:17:41 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/delvs-master/delvs.rb	Sun Jun 16 06:17:41 2013 +0000
@@ -0,0 +1,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