filled out the remaining operators
This commit is contained in:
parent
dd13983e84
commit
e3b0af2f12
1 changed files with 39 additions and 27 deletions
66
main.py
66
main.py
|
|
@ -409,40 +409,52 @@ def evaluate(expr):
|
|||
return ~evaluate(subexp) & M;
|
||||
case (first, "||", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]:
|
||||
subresult = evaluate(subexpr);
|
||||
result = result | subresult;
|
||||
for subexpr in rest[::2]: result = result | evaluate(subexpr);
|
||||
return result;
|
||||
case (first, "!|", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = ~(result | evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, "|!", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (~result | evaluate(subexpr)) & M;
|
||||
return result;
|
||||
# case (left, "!|", right):
|
||||
# return ~(evaluate(left) | evaluate(right)) & M;
|
||||
# case (left, "|!", right):
|
||||
# return (~evaluate(left) | evaluate(right)) & M;
|
||||
case (first, "&&", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]:
|
||||
subresult = evaluate(subexpr);
|
||||
result = result & subresult;
|
||||
for subexpr in rest[::2]: result = result & evaluate(subexpr);
|
||||
return result;
|
||||
case (first, "!&", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = ~(result & evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, "&!", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (~result & evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, "<", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (~result & evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, "<=", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (~result | evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, ">", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (result & ~evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, ">=", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (result | ~evaluate(subexpr)) & M;
|
||||
return result;
|
||||
case (first, "!=", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]: result = (result ^ evaluate(subexpr)) & M
|
||||
return result;
|
||||
# case (left, "!&", right):
|
||||
# return ~(evaluate(left) & evaluate(right)) & M;
|
||||
# case (left, "&!", right):
|
||||
# return (~evaluate(left) & evaluate(right)) & M;
|
||||
# case (left, "<", right):
|
||||
# return (~evaluate(left) & evaluate(right)) & M;
|
||||
# case (left, "<=", right):
|
||||
# return (~evaluate(left) | evaluate(right)) & M;
|
||||
# case (left, ">", right):
|
||||
# return (evaluate(left) & ~evaluate(right)) & M;
|
||||
# case (left, ">=", right):
|
||||
# return (evaluate(left) | ~evaluate(right)) & M;
|
||||
case (first, "==", *rest):
|
||||
result = evaluate(first);
|
||||
for subexpr in rest[::2]:
|
||||
subresult = evaluate(subexpr);
|
||||
result = ~(result ^ subresult) & M
|
||||
for subexpr in rest[::2]: result = ~(result ^ evaluate(subexpr)) & M
|
||||
return result;
|
||||
# case (left, "!=", right):
|
||||
# return evaluate(left) ^ evaluate(right);
|
||||
case _:
|
||||
print(expr);
|
||||
assert(not "TODO");
|
||||
|
|
|
|||
Loading…
Reference in a new issue