User:Shazun bhasfu

From Esolang
Jump to navigation Jump to search

shazun bhasfu user page

/ʃɑːˈzʊn ˈbʱɑːsfu/ Hello, I'm Shazun Bhasfu and welcome to my page, I guess, I'm esolang developer, currently there are two esolangs: somp and tzlel

Since I will not use GitHub, if you want the source code for my esolangs, here it is:

somp

somp is a dual-stack esolang, currently the code is outdated but im filling with more bloat

import sys
import time

def readf(filename):
    with open(filename, 'r') as f:
        return f.read().replace('\\n', '\n')

if __name__ == '__main__':
    buf = ""
    file = None
    if len(sys.argv) > 2:
        if sys.argv[2] == '-ci':
            buf = input('> ').replace('\\n', '\n')
            file = sys.argv[1]
    else:
        file = sys.argv[1]
    filep = readf(file)
    nl = {}
    il = {}
    j = 0
    while j < len(filep) - 1:
        if filep[j].isalpha() and filep[j+1] == ':':
            nl[filep[j]] = j + 2
        elif filep[j] == ':':
            il[j] = None
        j += 1
    pi = 0
    bi = 0
    stacks = [[], []]
    cs = stacks[0]
    t = 0
    pin = []
    while pi < len(filep):
        if filep[pi] == ';':
            if pin:
                pi = pin.pop()
            else:
                break
        elif filep[pi] == '^':
            cs.append(0)
        elif filep[pi].isdigit():
            if cs:
                cs.append(cs.pop() * 10 + int(filep[pi]))
            else:
                cs.append(int(filep[pi]))
        elif filep[pi] == '+':
            a = cs.pop() if cs else 0
            b = cs.pop() if cs else 0
            cs.append(a + b)
        elif filep[pi] == '-':
            cs.append(cs.pop() * -1)
        elif filep[pi] == '|':
            if cs:
                cs.append(cs[-1])
        elif filep[pi] == '%':
            temp = cs.pop() if cs else 0
            a, b = temp // 10, temp % 10
            cs.append(a)
            cs.append(b)
        elif filep[pi] == '&':
            cs[:] = cs[::-1]
        elif filep[pi] == '?':
            a = cs.pop()
            if a >= 0:
                cs.append(0)
            else:
                cs.append(1)
        elif filep[pi] == '°':
            if t == 0:
                stacks[1].append(cs.pop() if cs else 0)
            else:
                stacks[0].append(cs.pop() if cs else 0)
        elif filep[pi] == '!':
            a = cs.pop()
            if a != 0:
                pi += 1
        elif filep[pi] == ',':
            if bi < len(buf):
                cs.append(ord(buf[bi]))
                bi += 1
            else:
                cs.append(ord(input()[0]))
        elif filep[pi] == '.':
            if cs:
                print(chr(cs.pop()), end='')
        elif filep[pi].isalpha():
            if filep[pi] in nl:
                pin.append(pi)
                pi = nl[filep[pi]]
                continue
        elif filep[pi] == '/':
            temp = pi
            while temp >= 0:
                if temp in il:
                    pi = temp
                    break
                temp -= 1
        elif filep[pi] == '@':
            count = 0
            while pi + count < len(filep) and filep[pi + count] == '@':
                count += 1
            for _ in range(count):
                temp = pi + 1
                while temp < len(filep):
                    if temp in il:
                        pi = temp
                        break
                    temp += 1
            pi -= 1
        elif filep[pi] == '$':
            cs.pop()
        elif filep[pi] == '"':
            if t == 0:
                cs = stacks[1]
                t = 1
            else:
                cs = stacks[0]
                t = 0
        elif filep[pi] == '*':
            if t == 0:
                stacks[0], stacks[1] = stacks[1], stacks[0]
                cs = stacks[0]
            else:
                stacks[0], stacks[1] = stacks[1], stacks[0]
                cs = stacks[1]
        elif filep[pi] == '~':
            temp = cs[-2]
            cs[-2] = cs[-1]
            cs[-1] = temp
        elif filep[pi] == '`':
            a = str(cs.pop())
            cs.append(len(a))
        elif filep[pi] == '´':
            a = cs.pop()
            cs[-a:] = cs[-a:][::-1]
        elif filep[pi] == '#':
            cs.append(len(cs)-1)
        elif filep[pi] == '=':
            cs.append(len(str(cs[-1]))-1)
        pi += 1

tzlel

currently the interpreter is not finished, but if you like to do anyways, here:

import sys
import time 

def readf(file):
    with open(file, 'r') as f:
        return f.read()

if __name__ == '__main__':
    df = readf(sys.argv[1])
    pf = readf(sys.argv[2])

    pi = 0
    di = 0

    df += '\n' if df[-1] != '\n' else ''
    dl = 0
    table = {}
    while di < len(df):
        ndi = df.index('\n', di)
        line = df[di:ndi]
        if line[0] == '#':
            dl = int(line[1:])
        elif line[0] == '/':
            col = line.index(':')
            if len(line[:col])-1 != dl:
                sys.exit(1)
            else:
                table[line[1:col]] = line[col+1:]
        di = ndi+1
    di = -1
    datas = []
    while pi < len(pf):
        op = table[pf[pi:pi+dl]]
        if op == ';':
            break
        elif op == '0':
            datas.insert(di, 0)
        elif op[0] == '-':
            datas[di] *= -1
        elif op[0] == '+':
            if op[1] == ',':
                datas[di] += datas[-2]
            else:
                datas[di] += int(op[1:])
        elif op[0] == 'o':
            print(chr(datas[di]))
        elif op[0] == 'O':
            print(datas[di])
        elif op[0] == '\'':
            datas.pop(di)
        elif op[0] == '_':
            if op[1] == ',':
                di += datas[-2]
            else:
                di += int(op[1:])
        elif op[0] == 'I':
            if op[1] == ',':
                datas.insert(di, int(op[1:]))
            else:
                datas.insert(di, datas[di])
        elif op[0] == 'i':
            if op[1] == ',':
                datas.insert(di, int(op[1:]))
            else:
                datas.insert(di, ord(datas[di]))
        elif op == ':':
            a = datas.pop(di)
            pi += a if a%di else a+(a%di)
        pi += dl