All pastes #968434 Raw Edit

Aubergine interpreter

public ruby v1 · immutable
#968434 ·published 2008-04-03 01:04 UTC
rendered paste body
#!/usr/bin/ruby## Aubergine -- Programmation plutt machine et obscure#$a = 0$b = 0$i = 0$stuff = readlines.join('').split('').collect { |c| c[0] }$stufflen = $stuff.lengthdef oops    code = $stuff[$i,3].collect { |c| (c >= 0 or c <= 255) ? c.chr : ' ' }.join('')    puts "Error: a=%d, b=%d, i=%d, code=%s" % [$a, $b, $i, code]    exit 1enddef from(x)    thing = case $stuff[x]        when ?a            $a        when ?A            oops if $a < 0 or $a >= $stufflen            $stuff[$a]        when ?b            $b        when ?B            oops if $b < 0 or $b >= $stufflen            $stuff[$b]        when ?i            $i        when ?o            STDIN.getc        when ?1            1        else            oops        end    return thingendwhile ($i >= 0) and ($i < $stufflen - 3)    case $stuff[$i]    when ?=        case $stuff[$i+1]        when ?a            $a = from($i+2)        when ?A            oops if $a < 0 or $a >= $stufflen            $stuff[$a] = from($i+2)        when ?b            $b = from($i+2)        when ?B            oops if $b < 0 or $b >= $stufflen            $stuff[$b] = from($i+2)        when ?i            $i = from($i+2)        when ?o            out = from($i+2)            oops if out < 0 or out > 255            print out.chr        else            oops        end    when ?+        case $stuff[$i+1]        when ?a            $a += from($i+2)        when ?A            oops if $a < 0 or $a >= $stufflen            $stuff[$a] += from($i+2)        when ?b            $b += from($i+2)        when ?B            oops if $b < 0 or $b >= $stufflen            $stuff[$b] += from($i+2)        when ?i            $i += from($i+2)        else            oops        end    when ?-        case $stuff[$i+1]        when ?a            $a -= from($i+2)        when ?A            oops if $a < 0 or $a >= $stufflen            $stuff[$a] -= from($i+2)        when ?b            $b -= from($i+2)        when ?B            oops if $b < 0 or $b >= $stufflen            $stuff[$b] -= from($i+2)        when ?i            $i -= from($i+2)        else            oops        end    when ?:        $i = from($i+1) if from($i+2) != 0    else        oops    end    $i += 3end