|
|
@ -83,6 +83,8 @@ def execute(program): |
|
|
|
return reduce(lambda a, b: (a[0], a[1]*b[1]), subs[1:]) |
|
|
|
return reduce(lambda a, b: (a[0], a[1]*b[1]), subs[1:]) |
|
|
|
elif ctx[0] == _ident("/"): |
|
|
|
elif ctx[0] == _ident("/"): |
|
|
|
return reduce(lambda a, b: (a[0], a[1]/b[1]), subs[1:]) |
|
|
|
return reduce(lambda a, b: (a[0], a[1]/b[1]), subs[1:]) |
|
|
|
|
|
|
|
elif ctx[0] == _ident("^"): |
|
|
|
|
|
|
|
return reduce(lambda a, b: (a[0], a[1]**b[1]), subs[1:]) |
|
|
|
elif ctx[0] == _ident("=="): |
|
|
|
elif ctx[0] == _ident("=="): |
|
|
|
return ("number", 1.0 if subs[1] == subs[2] else 0.0) |
|
|
|
return ("number", 1.0 if subs[1] == subs[2] else 0.0) |
|
|
|
elif ctx[0] == _ident("="): |
|
|
|
elif ctx[0] == _ident("="): |
|
|
@ -101,9 +103,9 @@ def execute(program): |
|
|
|
|
|
|
|
|
|
|
|
return (subs[1][1], float(subs[2][1]) if subs[1][1] == "number" else str(subs[2][1])) |
|
|
|
return (subs[1][1], float(subs[2][1]) if subs[1][1] == "number" else str(subs[2][1])) |
|
|
|
elif ctx[0] == _ident("all"): |
|
|
|
elif ctx[0] == _ident("all"): |
|
|
|
ret = _execute(subs[1], lids) |
|
|
|
ret = [_execute(subs[1], lids)] |
|
|
|
for statement in subs[2:]: |
|
|
|
for statement in subs[2:]: |
|
|
|
ret = _execute(statement, lids) |
|
|
|
ret.append(_execute(statement, lids)) |
|
|
|
return ret |
|
|
|
return ret |
|
|
|
elif ctx[0] == _ident("at"): |
|
|
|
elif ctx[0] == _ident("at"): |
|
|
|
return subs[2][int(subs[1][1])] |
|
|
|
return subs[2][int(subs[1][1])] |
|
|
|