We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

Methemetics/Interpreter

From Esolang
Jump to navigation Jump to search
 DEBUG = 0
 
 
 
 
 
 import re
 from sys import argv
 
 matchregex=r"(_?\w|[a-zA-Z]{2,}) ?= ?(-?\d+|_?\w|[a-zA-Z]{2,})( ?(!=|>|<|==|-|\+|\*|\/|%) ?(-?\d+|_?\w|[a-zA-Z]{2,}))?;";
 
 try:
     input = argv[2]
 except:
     input = 
 
 txt = open(argv[1],'r').read()
 
 _i = '_i'
 v = {'_i':0,'_z':0}
 x = re.findall(matchregex, txt)
 if DEBUG:
     print(x) 
 
 for i in range(len(x)):
     if x[i][2] == :
         x[i] = (x[i][0],x[i][1],)
     else:
         x[i] = (x[i][0],x[i][1],x[i][3],x[i][4])
 if DEBUG:
     print(x) 
 
 while v[_i] < len(x):
     try:
         v["_p"] = ord(input[v["_z"]])
     except IndexError:
         v["_p"] = -1
     if x[v[_i]][2] == :
         match x[v[_i]][0]:
             case '_o':
                 if DEBUG:
                     print('outputted value:',v[x[v[_i]][1]])
                 else:
                     try:
                         print(chr(v[x[v[_i]][1]]),end=)
                     except ValueError:
                         print(chr(0),end=)
                     except KeyError:
                         try:
                             print(chr(int(x[v[_i]][1])),end=)
                         except ValueError:
                             print(chr(0),end=)
             case _:
                 match x[v[_i]][1]:
                     case "_p":
                         v[x[v[_i]][0]] = v["_p"]
                     case _:
                         try:
                             v[x[v[_i]][0]] = int(x[v[_i]][1])
                         except ValueError:
                             v[x[v[_i]][0]] = v[x[v[_i]][1]]
     else:
         try:
             try:
                 exec(f'v[x[v[_i]][0]] = int(x[v[_i]][1]){x[v[_i]][2]}int(x[v[_i]][3])') # this
             except ValueError:
                 exec(f'v[x[v[_i]][0]] = int(x[v[_i]][1]){x[v[_i]][2]}v[x[v[_i]][3]]') # is
         except:
             try:
                 exec(f'v[x[v[_i]][0]] = int(x[v[_i]][3]){x[v[_i]][2]}v[x[v[_i]][1]]') # extremely
             except ValueError:
                 exec(f'v[x[v[_i]][0]] = v[x[v[_i]][1]]{x[v[_i]][2]}v[x[v[_i]][3]]') # cursed
     if DEBUG:
         print(v) # i guess
     if v[_i] < -1:
         if DEBUG:
             print(v) # i guess
         exit()
     v[_i] += 1