type2/examples/arithmetics/eval
2022-03-20 21:46:49 +01:00

34 lines
954 B
Python
Executable file

#!/usr/bin/env python3
import sys as _sys
import json as _json
def evaluate(node):
# _sys.stderr.write("eval: %s\n" % _json.dumps(node))
if (node["label"] == "constant"):
return int(node["value"][0]["data"]["value"])
elif (node["label"] == "sum"):
return (evaluate(node["children"][0]) + evaluate(node["children"][1]))
elif (node["label"] == "difference"):
return (evaluate(node["children"][0]) - evaluate(node["children"][1]))
elif (node["label"] == "product"):
return (evaluate(node["children"][0]) * evaluate(node["children"][1]))
elif (node["label"] == "quotient"):
return (evaluate(node["children"][0]) / evaluate(node["children"][1]))
elif (node["label"] == "priorised"):
return evaluate(node["children"][0])
else:
raise ValueError("unhandled label: " + node["label"])
def main():
content = _sys.stdin.read()
node = _json.loads(content)
value = evaluate(node)
_sys.stdout.write(_json.dumps(value) + "\n")
main()