Deadfish "self-interpreter"

From Esolang
Jump to navigation Jump to search

Deadfish "self-interpreter" is a small Deadfish extension that supports interpreting Deadfish.

Syntax

Accumulator b is equivalent to Deadfish's accumulator, whereas accumulator a stores one character.

Instruction Description
a input accumulator a
i increment accumulator b
d decrement accumulator b
s square accumulator b
o output accumulator b
j jump back to the start of the program
: if the character after : is equal to a, interpret that character, else, skip it.

Example programs

Deadfish interpreter

a:i:d:s:oj

"Truth-machine"

For input 0, input 0, then 0. For input 1, input i, then j, then 0, then j, then repeat inputting 0j.

a:ioa:j

Simple Python Interpreter

acc = 0
input_acc = 0

source = input("Program: ")

def run(program):
    global acc, input_acc
    ip = 0

    while ip < len(program):
        if acc == 256 or acc < 0:
            acc = 0

        if program[ip] == "j":
            ip = 0
            continue

        elif program[ip] == "i":
            acc += 1

        elif program[ip] == "d":
            acc -= 1

        elif program[ip] == "s":
            acc *= acc

        elif program[ip] == "o":
            print(acc)

        elif program[ip] == ":":
            if ord(program[ip + 1]) == input_acc:
                run(chr(input_acc))
            ip += 2
            continue

        elif program[ip] == "a":
            try: input_acc = ord(input(">"))
            except: continue
            

        ip += 1

run(source)

See also

Deadfish