view share/delvs-master/delvs.rb @ 7946:8ecffca9813d

<moon__> mkx bin/hfs//erro \'You have discovered an eerie cavern. The air aboe the dark stone floor is alive ith vortices of purple light and dark, boiling clouds. Seemingly bottemless pits mark the surface. "$1" stand below\'
author HackBot
date Sat, 07 May 2016 18:36:18 +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