def click(self): gram = self.textEdit.toPlainText().split('\n') sentence = self.lineEdit.text() grammar=Grammar() grammar.insert_from_arr(gram) # grammar = Grammar() # grammar.insert_from_arr(gram) self.tableWidget.setColumnCount(len(grammar.terminals)+len(grammar.nonterminals)) self.tableWidget.setHorizontalHeaderLabels(grammar.terminals+['$']+grammar.nonterminals) for i in range(len(grammar.terminals)+2+len(grammar.nonterminals)): self.tableWidget.setColumnWidth(i,65) self.tableWidget_2.setColumnCount(4) self.tableWidget_2.setHorizontalHeaderLabels(['栈', '符号', '所剩输入串', '动作']) C=grammar.items() action, goto = grammar.Constructing_an_SLR_parsing_table() print(action) print(goto) for i in range(len(C)): self.tableWidget.insertRow(self.tableWidget.rowCount()) for j,item in enumerate(grammar.terminals): self.tableWidget.setItem(i,j,QTableWidgetItem(action[(i,item)])) self.tableWidget.setItem(i,len(grammar.terminals),QTableWidgetItem(action[(i,'$')])) for j,item in enumerate(grammar.nonterminals): self.tableWidget.setItem(i,len(grammar.terminals)+1+j,QTableWidgetItem(str(goto[(i,item)]))) step = grammar.LR_parsing_program(action,goto,sentence) print(step) for i in range(len(step)): self.tableWidget_2.insertRow(self.tableWidget_2.rowCount()) for i in range(self.tableWidget_2.rowCount()): for j in range(self.tableWidget_2.columnCount()): self.tableWidget_2.setItem(i, j, QTableWidgetItem(step[i][j])) # # LR(0)自动机 transitions = [] for item in C: for symbol in grammar.terminals + grammar.nonterminals: if grammar.goto(item, symbol) != []: transitions.append((adjust(item), adjust( grammar.goto(item, symbol)), symbol)) # for item in transitions: # print(item) from graphviz import Digraph f = Digraph('finite_state_machine', filename='fsm.gv') f.attr(rankdir='LR', size='8,5') f.attr('node', shape='square') for transition in transitions: f.edge(transition[0], transition[1], label=transition[2]) f.view() #把分析过程写入Excel文件中 from pyexcelerate import Workbook data = step # data is a 2D array wb = Workbook() wb.new_sheet("step", data=data) wb.save("output.xlsx")