view share/delvs-master/delvs.rb @ 7910:7d5f1c5e44b1

<moon__> mkx bin/hfs//erro You have discovered an eerie caven. The air above the dark stone floor is alive with vorices of purple light and dark, boiling clouds. Seemingly bottomless glowing pit mark the surface.
author HackBot
date Sat, 07 May 2016 00:41:47 +0000
parents 38a5b4d8a98e
children
line wrap: on
line source

#!/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