#Python 3, 1322 bytes
Python 3, 1322 bytes
#Python 3, 1322 bytes
Python 3, 1322 bytes
Hence the sys.setrecursionlimit(2000).
Hence the sys.setrecursionlimit(2000).
#Python 3, 12901322 bytes
import re;Fre,sys;sys.setrecursionlimit(2000);F,L=filter,list
class P:
N,O,F=0,{},{}
def __init__(S,c):
S.B,S.E={"p":S.P,"i":S.I,"d":S.D,"a":S.L},dict(enumerate(F(None,[i.split('#')[0].rstrip()for i in c.splitlines()])))
while S.N in S.E:S.X(S.E[S.N])
def V(S, v, y, z=0):
if re.match("[\w_][\d\w_]*",v):
if not v in y:
if z is not None:y[v]=z
else:return False
return True
return False
def A(S):S.N+=1
def P(S,v):
if S.V(v,S.O):print("{0} = {1}".format(v, S.O[v]));return True
return False
def I(S,v):
if S.V(v, S.O):S.O[v]+=1;return True
return False
def D(S,v):
if S.V(v,S.O)and S.O[v]>0:S.O[v]-=1;return True
return False
def L(S,v):
e=[]
if S.V(v,S.F,e):
for i in range(3):S.A();e.append(S.E[S.N].lstrip())
return True
return False
def C(S,c,v):
def R(Z,v):
for i in re.findall("\s(\d+)", Z):Z=Z.replace(" %s"%i," %s"%v[int(i)-1])
return Z
Q,m,f=map(lambda l:R(l,v),S.F[c])
if S.X(Q,False):return S.X(m,False)
return S.X(f,False)
def X(S,Z,C=True):
u=re.match("\s?([\w_][\d\w_]*)\s?([\w_][\d\w ]*)?",Z)
if u:
c,v=map(lambda i:''if i is None else i,u.groups());v=L(F(None,v.split(' ')))
if S.V(c,S.F,None):
T=S.C(c, v)
if C:S.A()
elif S.V(c,S.B,None):
T=S.B[c](*v)
if C:S.A()
else:return False
return T
return False
#Python 3, 1290 bytes
import re;F,L=filter,list
class P:
N,O,F=0,{},{}
def __init__(S,c):
S.B,S.E={"p":S.P,"i":S.I,"d":S.D,"a":S.L},dict(enumerate(F(None,[i.split('#')[0].rstrip()for i in c.splitlines()])))
while S.N in S.E:S.X(S.E[S.N])
def V(S, v, y, z=0):
if re.match("[\w_][\d\w_]*",v):
if not v in y:
if z is not None:y[v]=z
else:return False
return True
return False
def A(S):S.N+=1
def P(S,v):
if S.V(v,S.O):print("{0} = {1}".format(v, S.O[v]));return True
return False
def I(S,v):
if S.V(v, S.O):S.O[v]+=1;return True
return False
def D(S,v):
if S.V(v,S.O)and S.O[v]>0:S.O[v]-=1;return True
return False
def L(S,v):
e=[]
if S.V(v,S.F,e):
for i in range(3):S.A();e.append(S.E[S.N].lstrip())
return True
return False
def C(S,c,v):
def R(Z,v):
for i in re.findall("\s(\d+)", Z):Z=Z.replace(" %s"%i," %s"%v[int(i)-1])
return Z
Q,m,f=map(lambda l:R(l,v),S.F[c])
if S.X(Q,False):return S.X(m,False)
return S.X(f,False)
def X(S,Z,C=True):
u=re.match("\s?([\w_][\d\w_]*)\s?([\w_][\d\w ]*)?",Z)
if u:
c,v=map(lambda i:''if i is None else i,u.groups());v=L(F(None,v.split(' ')))
if S.V(c,S.F,None):
T=S.C(c, v)
if C:S.A()
elif S.V(c,S.B,None):
T=S.B[c](*v)
if C:S.A()
else:return False
return T
return False
#Python 3, 1322 bytes
import re,sys;sys.setrecursionlimit(2000);F,L=filter,list
class P:
N,O,F=0,{},{}
def __init__(S,c):
S.B,S.E={"p":S.P,"i":S.I,"d":S.D,"a":S.L},dict(enumerate(F(None,[i.split('#')[0].rstrip()for i in c.splitlines()])))
while S.N in S.E:S.X(S.E[S.N])
def V(S, v, y, z=0):
if re.match("[\w_][\d\w_]*",v):
if not v in y:
if z is not None:y[v]=z
else:return False
return True
return False
def A(S):S.N+=1
def P(S,v):
if S.V(v,S.O):print("{0} = {1}".format(v, S.O[v]));return True
return False
def I(S,v):
if S.V(v, S.O):S.O[v]+=1;return True
return False
def D(S,v):
if S.V(v,S.O)and S.O[v]>0:S.O[v]-=1;return True
return False
def L(S,v):
e=[]
if S.V(v,S.F,e):
for i in range(3):S.A();e.append(S.E[S.N].lstrip())
return True
return False
def C(S,c,v):
def R(Z,v):
for i in re.findall("\s(\d+)", Z):Z=Z.replace(" %s"%i," %s"%v[int(i)-1])
return Z
Q,m,f=map(lambda l:R(l,v),S.F[c])
if S.X(Q,False):return S.X(m,False)
return S.X(f,False)
def X(S,Z,C=True):
u=re.match("\s?([\w_][\d\w_]*)\s?([\w_][\d\w ]*)?",Z)
if u:
c,v=map(lambda i:''if i is None else i,u.groups());v=L(F(None,v.split(' ')))
if S.V(c,S.F,None):
T=S.C(c, v)
if C:S.A()
elif S.V(c,S.B,None):
T=S.B[c](*v)
if C:S.A()
else:return False
return T
return False
Loading