编译原理课程设计.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档