在这里,我们提供了一个关于如何重构逻辑表达式解析器和计算器的建议。
-
拆分代码:将解析器和计算器分开。这将使代码更清晰,易于维护并更具可读性。
-
使用递归:重构解析器并使用递归来处理树形结构。这样可以使解析器更加灵活并能够处理更复杂的表达式。
代码示例:
class Node():
def evaluate(self):
pass
class BinaryOperator(Node):
def __init__(self, left, right):
self.left = left
self.right = right
class AndOperator(BinaryOperator):
def evaluate(self):
left_value = self.left.evaluate()
if left_value == False:
return False
return self.right.evaluate()
class OrOperator(BinaryOperator):
def evaluate(self):
left_value = self.left.evaluate()
if left_value == True:
return True
return self.right.evaluate()
class NotOperator(Node):
def __init__(self, expression):
self.expression = expression
def evaluate(self):
return not self.expression.evaluate()
class Variable(Node):
def __init__(self, name, value):
self.name = name
self.value = value
def evaluate(self):
return self.value.get(self.name, False)
class Constant(Node):
def __init__(self, value):
self.value = value
def evaluate(self):
return self.value
- 使用状态模式:使用状态模式来实现计算器。这样可以使代码更具可维护性和可扩展性。
代码示例:
class State():
def handle(self, token):
pass
class InitialState(State):
def handle(self, token):
pass
class AndState(State):
def handle(self, token):
pass
class OrState(State):
def handle(self, token):
pass
class NotState(State):
def handle(self, token):
pass