type2/examples/logic/eval

34 lines
850 B
Plaintext
Raw Normal View History

2021-09-19 01:14:32 +02:00
#!/usr/bin/env python3
import sys as _sys
import json as _json
def evaluate(node):
# _sys.stderr.write("eval: %s\n" % _json.dumps(node))
2022-03-20 14:39:35 +01:00
if (node["label"] == "constant_false"):
return False
elif (node["label"] == "constant_true"):
return True
2021-09-19 01:14:32 +02:00
elif (node["label"] == "negation"):
return (not evaluate(node["children"][0]))
elif (node["label"] == "conjunction"):
return (evaluate(node["children"][0]) and evaluate(node["children"][1]))
elif (node["label"] == "disjunction"):
return (evaluate(node["children"][0]) or evaluate(node["children"][1]))
2021-09-19 01:57:25 +02:00
elif (node["label"] == "priorised"):
return evaluate(node["children"][0])
else:
raise ValueError("unhandled label: " + node["label"])
2021-09-19 01:14:32 +02:00
def main():
content = _sys.stdin.read()
node = _json.loads(content)
value = evaluate(node)
_sys.stdout.write(str(value) + "\n")
main()