|
|
|
@ -44,6 +44,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
self.ex_node_ops.clicked.connect(self.exchange_ops_node) # 修改运算符节点
|
|
|
|
|
self.ex_node_self.clicked.connect(self.exchange_two_nodes) # 交换两个节点
|
|
|
|
|
self.pushButton_exp.clicked.connect(self.agent_exp) # 生成表达式
|
|
|
|
|
self.pushButton_check_te.clicked.connect(self.check_tree_and_expression) # 验证语法树和表达式是否匹配
|
|
|
|
|
|
|
|
|
|
def secen_clear(self):
|
|
|
|
|
self.scene.clear()
|
|
|
|
@ -59,6 +60,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
self.lb_ops_selected.setText("") # 运算符显示
|
|
|
|
|
self.p1_selected.setStyleSheet("border-image: none;") # 清空已选牌面
|
|
|
|
|
|
|
|
|
|
self.pushButton_ast.setEnabled(True)
|
|
|
|
|
self.pushButton_allan.setEnabled(True)
|
|
|
|
|
self.pushButton_dtree.setEnabled(True)
|
|
|
|
|
self.pushButton_autosv.setEnabled(True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def select_ops(self, ops):
|
|
|
|
|
self.lb_ops_selected.setText(ops)
|
|
|
|
@ -126,8 +134,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
self.seq = 1 # 重置序号
|
|
|
|
|
for noed in self.TreeNode:
|
|
|
|
|
print("运算符节点", noed)
|
|
|
|
|
exps = data.get_expression(self.TreeNode)
|
|
|
|
|
print("表达式", exps)
|
|
|
|
|
# exps = data.get_expression(self.TreeNode)
|
|
|
|
|
# print("表达式", exps)
|
|
|
|
|
else:
|
|
|
|
|
QMessageBox.warning(self, '警告', '请先选择两个节点')
|
|
|
|
|
else:
|
|
|
|
@ -149,7 +157,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
if self.TreeNode:
|
|
|
|
|
for node in self.TreeNode:
|
|
|
|
|
if node.NodeID == self.selected_id[0]:
|
|
|
|
|
node.FaceValue = self.selected_value
|
|
|
|
|
node.FaceValue = str(self.selected_value)
|
|
|
|
|
for nodet in self.scene.items():
|
|
|
|
|
if isinstance(nodet, RoundedRectangleItem):
|
|
|
|
|
if nodet.id == self.selected_id[0]:
|
|
|
|
@ -211,8 +219,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
elif item.id == self.selected_id[1]:
|
|
|
|
|
item.text = str(node_2.FaceValue)
|
|
|
|
|
item.update()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
QMessageBox.warning(self, '警告', '请选择两个节点')
|
|
|
|
|
|
|
|
|
@ -247,7 +253,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
|
|
|
|
|
def load_image(self, path, Tree_4_nums, index):
|
|
|
|
|
def current_selection(value, path):
|
|
|
|
|
self.selected_value = value
|
|
|
|
|
self.selected_value = str(value)
|
|
|
|
|
self.p1_selected.setStyleSheet(f"border-image: url({path});")
|
|
|
|
|
self.pushButton_ast.setEnabled(False)
|
|
|
|
|
self.pushButton_allan.setEnabled(False)
|
|
|
|
@ -270,10 +276,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
|
|
|
|
|
def show_card(self):
|
|
|
|
|
self.secen_clear() # 清空画布
|
|
|
|
|
self.pushButton_ast.setEnabled(True)
|
|
|
|
|
self.pushButton_allan.setEnabled(True)
|
|
|
|
|
self.pushButton_dtree.setEnabled(True)
|
|
|
|
|
self.pushButton_autosv.setEnabled(True)
|
|
|
|
|
# 原始数组
|
|
|
|
|
self.lineEdit.clear()
|
|
|
|
|
self.label_result.setText(" =? ")
|
|
|
|
@ -368,6 +370,48 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
if opl in ops and opr in ops:
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def check_tree_and_expression(self): # 检查节点树和表达式是否一致
|
|
|
|
|
if self.TreeNode is not None:
|
|
|
|
|
aexp = self.lineEdit.text()
|
|
|
|
|
if aexp == '':
|
|
|
|
|
QMessageBox.warning(self, '警告', '请输入表达式')
|
|
|
|
|
return
|
|
|
|
|
try:
|
|
|
|
|
exp_ls = data.get_postfix_expression(aexp) # 获取后缀表达式列表
|
|
|
|
|
TreeNode2 = data.ExpressionAnalyse(exp_ls) # 将后缀表达式转化为节点树
|
|
|
|
|
if self.check_tree(self.TreeNode, TreeNode2):
|
|
|
|
|
QMessageBox.information(self, '提示', '节点树与表达式一致')
|
|
|
|
|
else:
|
|
|
|
|
QMessageBox.warning(self, '警告', '节点树与表达式不一致')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
QMessageBox.warning(self, '警告', '表达式错误')
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
QMessageBox.warning(self, '警告', '当前无语法树')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 检查两个节点树是否一致的函数
|
|
|
|
|
|
|
|
|
|
def check_tree(self, TreeNode1, TreeNode2):
|
|
|
|
|
if len(TreeNode1) != len(TreeNode2):
|
|
|
|
|
return False
|
|
|
|
|
for i in range(len(TreeNode1)):
|
|
|
|
|
if TreeNode1[i].NodeID != TreeNode2[i].NodeID:
|
|
|
|
|
return False
|
|
|
|
|
if TreeNode1[i].NodeType != TreeNode2[i].NodeType:
|
|
|
|
|
return False
|
|
|
|
|
if TreeNode1[i].Ops != TreeNode2[i].Ops:
|
|
|
|
|
return False
|
|
|
|
|
if TreeNode1[i].FaceValue != TreeNode2[i].FaceValue:
|
|
|
|
|
return False
|
|
|
|
|
if TreeNode1[i].LeftNodeID != TreeNode2[i].LeftNodeID:
|
|
|
|
|
return False
|
|
|
|
|
if TreeNode1[i].RightNodeID != TreeNode2[i].RightNodeID:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def draw_tree(self):
|
|
|
|
|
self.scene.clear()
|
|
|
|
|
aexp = self.lineEdit.text()
|
|
|
|
@ -457,7 +501,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
|
|
self.label_TF.setStyleSheet("color: red;background-color:rgb(219, 205, 166)")
|
|
|
|
|
|
|
|
|
|
def agent_exp(self):
|
|
|
|
|
if self.TreeNode is not None:
|
|
|
|
|
if len(self.TreeNode) > 0:
|
|
|
|
|
exp_str = data.get_expression(self.TreeNode)
|
|
|
|
|
if exp_str is not None:
|
|
|
|
|
self.label_result.clear() # 清空显示结果
|
|
|
|
|