 เขียนฟังก์ชันใน Python ที่ประเมินนิพจน์ที่กำหนด
def evaluation_expression(นิพจน์): # สแต็คสำหรับจัดเก็บค่าจำนวนเต็ม ค่า = [] # สแต็คเพื่อจัดเก็บตัวดำเนินการ ops = [] i = 0 ในขณะที่ i < len(นิพจน์): # โทเค็นปัจจุบันเป็นช่องว่าง # ข้ามไป ถ้านิพจน์[i] == ' ': i ++= 1 ดำเนินการต่อ # โทเค็นปัจจุบันเป็นการเปิด # เครื่องหมายปีกกา ให้กดไปที่ 'ops' elif expression[i] == '(': ops.append(expression[i]) # โทเค็นปัจจุบันเป็นตัวเลข กด # เพื่อเรียงซ้อนสำหรับตัวเลข elif expression[i].isdigit(): val = 0 # อาจมีมากกว่าหนึ่ง # หลักในตัวเลข ในขณะที่ (i < len(expression) และ expression[i].isdigit()): val = (val * 10) + int(expression[i]) i += 1 value.append(val) # พบเครื่องหมายปีกกาปิด, แก้เครื่องหมายปีกกา # ทั้งหมด นิพจน์ elif[i] == ')': while len(ops) != 0 และ ops[-1] != '(': val2 = Values.pop() val1 = Values.pop() op = ops.pop() Values.append (performOp(val1, val2, op)) # เครื่องหมายปีกกาเปิด ops.pop() # โทเค็นปัจจุบันเป็นตัวดำเนินการ อื่น: # ในขณะที่ด้านบนสุดของ 'ops' มีความสำคัญเท่ากันหรือ # มากกว่าโทเค็น # ปัจจุบัน ซึ่งเป็น ตัวดำเนินการ # ใช้ตัวดำเนินการที่ด้านบนของ 'ops' # กับองค์ประกอบสองอันดับแรกในสแต็กค่า ในขณะที่ (len(ops) != 0 และลำดับความสำคัญ(ops[-1]) >= ลำดับความสำคัญ(นิพจน์[i])): val2 =values.pop() val1 =values.pop() op = ops.pop()values.append(performOp(val1, val2, op)) # พุชโทเค็นปัจจุบันไปที่ 'ops' ops.append(expression[i]) i += 1 # นิพจน์ทั้งหมดถูกแยกวิเคราะห์ที่ # จุดนี้ ใช้ ops ที่เหลือกับค่า # ที่เหลือ ในขณะที่ len(ops) != 0: val2 = Values.pop() val1 = Values.pop() op = ops.pop() Values.append(performOp(val1, val2, op)) # ด้านบนสุดของ 'values' ประกอบด้วย ผลลัพธ์ให้ส่งคืน ค่าส่งคืน[-1]