logo资料库

将算术表达式转换成四元式的程序实现.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
课 程 设 计 设计题目 将算术表达式转换成四元式的程序实现 学生姓名 学 号 专业班级 计 算 机 科 学 与 技 术 0 8 - 1 班 指导教师 王仲宾 2010 年 12 月
合肥工业大学课程设计任务书 49.将算术表达式转换成四元式的程序实现 47.将算术表达式转换成三元式的程序实现 成绩 设 计 题 目 主 要 内 容 指 导 教 师 意 见 设计内容及要求:设计一个语法制导翻译器,将算术表达式翻译成四 元式。要求:先确定一个定义算术表达式的文法,为其设计一个语法分析程 序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法, 实现翻译程序。对用户输入的任意一个正确的算术表达式,程序将其转换成 三.四元式输出(可按一定格式输出到指定文件中)。 该生能按时完成课程设计任务书所规定的程序设计,综合运用 。 程 序 设 计 方 。程 所 学 知 识 独 立 分 析 和 解 决 问 题 的 能 力 案 序运行结果 。程序验收时回答问题 。 。论文论述 ,文理 ,格式 签名:
目 录 引言...............................................................1 第一章 概述.....................................................2 1.1 设计内容....................................................4 1.2 设计要求...................................................10 第二章 设计的基本原理...........................................15 2.1............................................................15 2.2............................................................20 第三章 程序设计.................................................30 3.1 总体方案设计...............................................31 3.2 各模块设计.................................................33 第四章 程序测试.................................................50 第五章 结论.....................................................56 参考文献...........................................................57 附录 程序清单.................................................66
第一章 概述 1.设计内容: 49.将算术表达式转换成四元式的程序实现 设计内容及要求:设计一个语法制导翻译器,将算术表达式翻译成四元式。要求: 先确定一个定义算术表达式的文法,为其设计一个语法分析程序,为每条产生式 配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用 户输入的任意一个正确的算术表达式,程序将其转换成四元式输出(可按一定格 式输出到指定文件中)。 第二章 设计的基本原理 四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代 码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。 具体的形式犹如:(1)(op,arg1,arg2,result) 例如,语句 a=b+(c-d)*e+f/g 的四元式表示如表 2.1 所示。 (1) (2) (3) (4) (5) (6) op - * + / + = left c T1 b f T3 a right d e T2 g T4 T5 T T1 T2 T3 T4 T5 T6 1).检查输入的元素; 2).如果是一个操作数,则进栈; 3).如果是操作符,则 i). 如果符号栈不为空或者此操作符的优先级大于符号栈栈顶的优先级,则将 此运算符压栈; ii).如果符号栈不为空或者此操作符的优先级小于符号栈栈顶的优先级,栈顶 操作符出栈并进行相应的操作; 4).假定输入完毕,栈中剩余的所有操作符出栈并进行相应操作。 三元式类似 第三章 程序设计 3.1 总体方案设计 按照顺序将任意一个正确的算术表达式拆分成操作符和操作数部分并入 栈,如后比较优先级按照优先级高低出栈,执行操作将算术表达式转换成四元式 输出。
3.2 各模块设计 (1) 函数 translate() int translate(string s) { stack OPND; stack OPER; char op; string arg1, arg2; int step = 0; char sChange[10]; string sTemp; cout << "转换成四元式:" << endl; for (int i=0; i<(int)s.length(); i++) { if ( (s[i]>='0' && s[i]<='9') || (s[i]>='a' && s[i]<='z') ) { sTemp = ""; sTemp += s[i]; OPND.push(sTemp); } else { while (!OPER.empty() && outstack(s[i])
OPER.push(s[i]); } } while (!OPER.empty()) { arg2 = OPND.top(); OPND.pop(); arg1 = OPND.top(); op = OPER.top(); OPER.pop(); output_file << "(" << step << ")"; cout<< "(" << step << ")"; step++; sTemp = _itoa(step, sChange, 10); sTemp = "T" + sTemp; OPND.push(sTemp); output_file <<"("<< op << "," << arg1 << "," << arg2 << "," << sTemp <<")"<< endl; cout<<"("<< op << "," << arg1 << "," << arg2 << "," << sTemp <<")"<< endl; } return 0; } 设计两个栈 opnd 和 opdr 分别作为操作数和操作符的操作栈,分别将两个操作数 和一个操作数进栈,将后一个操作符和栈中的操作数进行优先级比较。将优先级 大的操作符赋值给 op,并将栈顶操作数赋值给 right 栈底操作数赋值给 left, 将 step 加 1,并将 step 通过_itoa 函数转换成字符窜型和‘T’一起赋值给 Tstring。。。通过文本的操作语句输出到文本中。 三元式转换函数 int translate1(string s) { stack OPND; stack OPER; char op; string arg1, arg2; int step = 0; char sChange[10]; string sTemp; cout << "转换成三元式:" << endl; output_file << "转换成三元式:" << endl; for (int i=0; i<(int)s.length(); i++) { if ( (s[i]>='0' && s[i]<='9') || (s[i]>='a' && s[i]<='z') ) {
sTemp = ""; sTemp += s[i]; OPND.push(sTemp); } else { while (!OPER.empty() && outstack(s[i])
cout << "(" <> s; output_file.open(Schange_file,ios::out); translate(s); output_file.close(); cout << endl; } return 0; } 进行文本输错操作,先判断是否正确打开文本,如果打开,则将执行完毕的内容 输入到文本中并保存。 第四章 程序测试 在程序的文件夹里,新建一个”f.txt”文档,利用程序的输入/输出,完成实验要求。另外 不运用输入输出功能也可得出结果,运行结果如下: 输入: a=b+(c-d)*e+f/g 程序运行执行后结果:
分享到:
收藏