- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》实验报告_编写编译程序实现多行表达式的表达式序列的文法语言的编译执行
《编译原理》实验报告
———编写编译程序实现多行表达式的表达式
序列的文法语言的编译执行
组长:
组员:
一、实验项目名称:
有表示多行表达式的表达式序列文法如下:
表达式序列- 表达式 ↙表达式序列 |表达式↙↙
表达式 - [变量=] [+|-]项{(+|-)项}
项 - 因子{(* | /)因子}
因子 - 无符号实数|变量|标准函数‘(’表达式‘)’
|‘(’ 表达式‘)’
标准函数 - sin | cos | tan | exp
其中的变量无需定义且其作用域为第一次赋值处至最后。
试按递归下降方式设计其编译程序,生成PL/0栈式指令代码,然后解释执行。
二、实验要求:
·将编译和解释执行分成完全独立的两个阶段;
·对栈式指令进行适当扩充,使之能处理标准函数的调用;
·剔除本题目不需要的PL/0栈式指令,并说明理由;
·简化PL/0运行栈,使之满足本题目要求既可;
·注意表达式定义中的可选项[变量=]引起的歧义性:如 a=1+2与a+2,前一个a属于表达式,而后一个a属于项,思考如何解决;
·以“表达式↙目标码序列↙结果↙”方式输出运行结果;
·设计一个测试,使之能充分测试你的实现;
·对正确列出的目标码、执行并按适当方式演示运行栈的变化,计算出值;对错误的指出其出错位置和错误性质
三、设计概述:
·实现平台:VC++6.0
·运行平台:xindows xp
四、结构设计说明:
结构图:
编译系统总体流程图
五、具体实现过程:
1、词法分析(斯琴)
词法分析子程序名为getsym,功能是从源程序中读出一个单词符号,把它的信息放入全局变量sym,值放入id中,语法分析需要单词时,直接从变量中获得。getsym过程通过反复调用getch从源程序中获取字符,并把它们拼成单词。getch过程中使用了行缓存区技术。(每次读入一行,存入line缓存区,line被getsym取空后再读一行。)提高了程序运行效率。
词法分析器的分析过程:调用getsym时,它通过getch从源程序中获得一个字符。如果这个字符开头是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把sym变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名,常量名),把sym置为ident,把这个单词存入id变量。查保留字表时使用了二次法查找以提高效率。如果getch获取的字符是数字,则继续用个getch获取数字,并把它们拼成一个整数,然后把sym置为number,并把拼成的数值放入num变量。
取字符过程:
语法分析(宗华):
表达式序列文法为:
语法分析子程序分析: 语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。语法分析主要由表达式处理过程(expression)、项处理过程(term)、因子处理过程(factor)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(error)、代码生成过程(gen)、登录名字表过程(enter)、查询名字表函数(position)以及列出类PCODE代码过程(listcode)作过语法分析的辅助过程。表达式、项、因子处理: 根据PL/0语法可知,表达式应该是由正负号或无符号开头、由若干个项以加减号连接而成。而项是由若干个因子以乘除号连接而成,因子则可能是一个标识符或一个数字,或是一个以括号括起来的子表达式。根据这样的结构,构造出相应的过程,递归调用就完成了表达式的处理。把项和因子独立开处理解决了加减号与乘除号的优先级问题。在这几个过程的反复调用中,始终传递fsys变量的值,保证可以在出错的情况下跳过出错的符号,使分析过程得以进行下去。
其中的变量无需定义且其作用域为第一次赋值处至最后。
4、目标代码结构和代码生成(辛敏):
表达式序列编译程序不仅完成通常的词法分析、语法分析,而且还产生中间代码和“目标”代码。目标代码放在一个固定的存贮数组code中。
目标代码结构
lit num: 将常数值取到栈顶
opr 1 : 栈顶元素取反
opr 2 : 次栈顶与栈顶相加,退两个栈元素,结果值进栈
opr 3 : 次栈顶减去栈顶,退两个栈元素,结果值进栈
opr 4 : 次栈顶乘以栈顶,退两个栈元素,结果值进栈
opr 5 : 次栈顶除以栈顶,退两个栈元素,结果值进栈
sto i : 将栈顶内容送入某变量单元中
sin_ : 将栈顶计算sin
cos_ : 将栈顶计算cos
tan_ :
您可能关注的文档
- 《可编程序控制器应用技术》课程设计报告书_PLC在全自动洗衣机控制系统中的应用.doc
- 《大气污染控制工程》课程设计_DZL2_13型燃煤锅炉烟气袋式除尘系统设计.doc
- 《大气污染控制工程》课程设计_铸造厂烘干炉臭气治理工艺设计.doc
- 《安全监测监控技术及应用》课程设计_烟雾检测火灾自动报警.doc
- 《嵌入式应用系统设计》课程论文_基于ARM的音频接口设计.doc
- 《嵌入式系统与应用》设计性实验报告_基于ARM的多通道仪表数据采集实验.doc
- 《嵌入式系统原理与应用》综合设计课程设计_交通信号灯控制器设计.doc
- 《山东省城市园林绿化企业资质核准系统》园林系统操作指南.doc
- 《工程测试技术》课程设计_基于单片机的LVDT位移测量传感器设计说明书.doc
- 《应用密码学》课程设计_RSA加解密的设计与实现.doc
- 《综合电子设计报告》课程设计_基于单片机的可调时钟.doc
- 《统计学》讲义.doc
- 《编译原理》课程设计说明书_DO_WHILE循环语句的翻译程序设计(LR方法、输出三地址表示).doc
- 《网络工程设计》课程设计报告_XX小区网络设计的方案.doc
- 《网络数据库》课程综合性实验报告_图书借阅系统数据库设计.doc
- 《网络系统集成》课程作业_校园网网络系统集成方案.doc
- 《网络协议编程》课程设计报告_ICMP扫描程序的设计与实现.doc
- 《网络数据库》课程设计报告_图书借阅管理系统.doc
- 《网络工程规划与综合布线》课程设计_辽东学院艺术学院(1、2、3层)综合布线方案.doc
- 《网络互联组网配置技术》课程设计报告_网络互联组网配置技术.doc
文档评论(0)