- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课程设计
PAGE \* MERGEFORMAT 1
课 程 设 计
设计题目 将算术表达式转换成四元式的程序实现
设计题目
学生姓名号 康海潇
学生姓名号
学 号指导教师
学 号
指导教师
专业班级
计算机科学与技术2班
王仲宾
2008 年 12 月
合肥工业大学课程设计任务书
设 计
题 目
将算术表达式转换成四元式的程序实现
成绩
主
要
内
容
设计一个语法制导翻译器,将算术表达式翻译成四元式。要求:先确定一个定义算术表达式的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的算术表达式,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。
指
导
教
师
意
见
该生能按时完成课程设计任务书所规定的程序设计,综合运用所学知识独立分析和解决问题的能力 。程序设计方案 。论文论述 ,文理 ,格式 。程序运行结果 。程序验收时回答问题 。
签名:
目 录
第一章 概述4
1.1设计内容4
1.2设计要求4
第二章 设计的基本原理4
第三章 程序设计6
3.1总体方案设计6
3.2各模块设计6
第四章 程序测试7
...
第五章 结论7
附录 程序清单8
概述
设计内容:
设计一个语法制导翻译器,将算术表达式翻译成四元式。
设计要求:
先确定一个定义算术表达式的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的算术表达式,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。
设计的基本原理
四元式是一个带有四个域的记录结构,这四个域分别成为op,arg1,arg2及result。域op包含一个代表运算符的内部码。三地址语句x:=y op z可表示为:将y置于arg1域,z置于arg2域,x置于result域,:=为算符。带有一元运算符的语句如x:=-y或x:=y的表示中不用arg2.而像param这样的运算符仅使用arg1域。条件及无条件转移语句将目标标号置于result域中。赋值语句a:=b*-c+b*-c的四元式表示为:
op arg1 arg2 result
(0) uminus c _ T1
(1) * b T1 T2
(2) uminus c _ T3
(3) * b T3 T4
(4) + T2 T4 T5
(5) := T5 _ a
通常四元式的arg1,arg2 和result 的内容都是一个指针,此指针指向有关名字的符号表入口。这样临时变量名也要填入符合表。
本程序用c++语言编写,用一个string类型的数据存储读入的式子,由于要求读入算术表达式,所以输入为标准的算术表达式,如有负值则必须用括号括起来,格式如下:x=a+c×(e×(-d)).
所用到的产生式为:
E-E+E|E*E|E-E|E/E|(E)|(F)|i|ε;
F--i;
通过这个产生式可以得到任意一个算术表达式。
由于要求一遍扫描,所以用一个for循环语句实现对字符串从头到尾的扫描。同时根据优先级及一定的规则进行相应的处理,优先级的设置使算术表达式的计算顺序能够按正确的顺序进行,同时产生正确的临时变量,这里要用到栈结构存储那些已经扫描到但还不能处理的程序,从而实现产生四元式。
优先级设置为:”=””)””+”=”-””*”=”/””(”;由于有括号的情况比较复杂,可能“(”后跟“-”也可能为数值,所以要具体讨论。
具体如下:
先定义两个栈结构用来存储运算符号和字符,扫描整个算术表达式时,如果是字母则代表碰到一个变量,就无条件入栈,如果为”(”则表示下面会是一个在括号内进行的运算,且应该先运算,所以要不处理符号栈顶的符号,如果不是括号里为负数的形式,将“(”进栈,否则先执行将负值赋给一个临时变量,同时临时变量入字符栈,并向下继续有哪些信誉好的足球投注网站,如果为“)”则一定会执行完整个括号中的运算式,因此应该在碰到“=”或“(”停止四元式语句的产生,而对于一般的运算符号,则根本先算乘除后算加减,从左到右运算的原则,进行判定,从而确定是将运算符号存入栈还是用来产生四元式。还要注意的是“=”一定是在最后产生,依照这样的法则就会产生四元式。以一个表达式为例:
文档评论(0)