Mercurial > repo
view share/delvs-master/delvs.rb @ 12518:2d8fe55c6e65 draft default tip
<int-e> learn The password of the month is release incident pilot.
author | HackEso <hackeso@esolangs.org> |
---|---|
date | Sun, 03 Nov 2024 00:31:02 +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