资源简介
Python实现的编译原理中间代码生成程序,使用了PyQt5写图形界面
题目:设计一个程序,该程序能够将形如x=y op z的简单赋值语句翻译为对应的四元式序列,其中op可为+、-、*、/等二元运算符。要求用图形界面方式编程.
例如:若输入赋值语句a=b+c,则输出如下四元式序列:
(+,b,c,t1)
(=,t1,-,a)
代码片段和文件信息
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# author:zhaoxiaolong
# 用于将简单表达式转换为四元式,(表达式等号左边只有一个字符),运算符只支持加减乘除
# 注:使用了pyqt5,需要安装相应模块
import sys
from PyQt5.QtWidgets import (QWidget QLabel QLineEdit
QTextEdit QGridLayout QApplication QPushButton)
#将输入表达式转换为后缀表达式并产生四元式
class Suffix:
def __init__(self):
self.symbol = {‘(‘:3 ‘*‘:1 ‘/‘:1 ‘+‘:2 ‘-‘:2}
self.stack = [] #处理过程中需要用到的栈
self.result = [] #存放转换为的后缀表达式
#中缀转为后缀
def transform(self ip):
self.ip = ip
for element in self.ip:
‘‘‘如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止
左括号只弹出并不输出。‘‘‘
if element == ‘)‘:
while self.stack[-1] != ‘(‘:
self.result.append(self.stack[-1])
self.stack.pop()
self.stack.pop() #eject symbol ‘(‘
#‘(‘也放入栈中
elif element == ‘(‘:
self.stack.append(element)
#如果遇到操作符,则我们将其放入到栈中
elif element in self.symbol:
‘‘‘如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,
从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。
弹出完这些元素后,才将遇到的操作符压入到栈中。
有一点需要注意,只有在遇到‘)‘的情况下我们才弹出‘(‘
‘‘‘
priority = self.symbol[element]
if not self.stack:
self.stack.append(element)
else:
while self.stack:
if self.symbol[self.stack[-1]] <= priority:
self.result.append(self.stack[-1])
self.stack.pop()
else:
break
self.stack.append(element)
#如果遇到操作数,我们就直接将其输出(不入栈,只放入结果中)
else:
self.result.append(element)
#如果读到了输入的末尾,则将栈中所有元素依次弹出
while self.stack:
self.result.append(self.stack[-1])
self.stack.pop()
return self.result
#产生四元式存在answer[]中返回
def siyuanshi(self result left):
symbol = [‘+‘ ‘-‘ ‘*‘ ‘/‘]
s = ‘‘.join(result) #从s中用e遍历找到所有的操作符
answer = [] #存放四元式,每一个元素形如(+abt1)
tmp = 1 #用于产生中间变量t1t2...
for
- 上一篇:des.py
- 下一篇:tensorflow2.0实现mnist手写数字识别代码
评论
共有 条评论