- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》实验报告
完成时间:2010年5月4 日
一、实验题目
按递归下降方式设计编译程序,实现多行表达式的表达式序列的文法语言的编译执行。
二、实验成员及贡献
组长:张 (编译程序测试,撰写实验报告)
组员:崔 (系统设计,代码的编辑以及测试)
崔 (编译程序词法分析的设计与实现,编译程序测试)
孟凡 (编译程序语法分析的设计与实现,编译程序测试)
徐 (编译程序错误处理的实现,编译程序测试)
三、实验内容
有表示多行表达式的表达式序列文法如下:
表达式序列-表达式↙表达式序列 |表达式↙↙
表达式 - [变量=] [+ |-]项{ (+ |-)项}
项 -因子 {(* | /)因子 }
因子 -无符号实数 |变量 |标准函数‘(’表达式‘)’
|‘(’ 表达式‘)’
标准函数 - sin | cos | tan | exp
其中的变量无需定义且其作用域为第一次赋值处至最后。试按递归下降方式设计其编译程序,生成PL/0
栈式指令代码,然后解释执行。
要求:
1) 将编译和解释执行分成完全独立的两个阶段;
2) 对栈式指令进行适当扩充,使之能处理标准函数的调用;
3) 剔除本题目不需要的PL/0栈式指令,并说明理由;
4) 简化PL/0运行栈,使之满足本题目要求既可;
5) 注意表达式定义中的可选项[变量=]引起的歧义性:如 a=1+2与a+2 ,前一个a属于表达式 ,而后一
个a属于项 ,思考如何解决;
6) 以“表达式↙目标码序列↙结果↙”方式输出运行结果;
7) 设计一个测试,使之能充分测试你的实现;
8)对正确列出的目标码、执行并按适当方式演示运行栈的变化,计算出值;对错误的指出其出错位置和
错误性质。
四、系统设计
编译过程采用一趟扫描的方式,以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立
的过程,当语法分析需要读单词就调用词法分析程序,而当语法分析正确需生成相应的目标代码时,则
调用代码生成程序。此外,用表格管理程序建立变量、常量和过程标识符的说明与引用之间的信息联
系;用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质;当源程序编
译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序要求输入数
据和输出运行结果。本程序编译和解释执行的结构图如下所示:
源程序
1、编译程序词法分析的设计与实现
运算符:如:+、-、*、/、 等
标识符:用户定义的变量名、常数名
常数:如:10、25、100等整数
界符:如:‘;’、‘(’、‘)’等
标准函数:如sin ,cos ,tan等。
词法分析完成的功能
1. 识别标识符
2. 拼数
3. 拼复合词
4. 输出源程序
2、编译程序语法分析的设计与实现
递归子程序法:对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。语法分析从读入第
一个单词开始,由非终结符程序 (即开始符)出发,沿语法描述图箭头所指出的方向进行分析。当遇
到非终结符时,则调用相应的处理过程,从语法描述图看,也就进入了一个语法单元,再沿当前所进入
的语法单元所指箭头方向继续进行分析。当遇到描述图中是终结符时,则判断当前读入的单词是否与图
中的终结符相匹配,若匹配,再读取下一个单词继续分析。遇到分支点时,将当前的单词与分支点上多
个终结符逐个相比较,若都不匹配时可能是进入下一个非终结符语法单位或是出错。
五、测试与执行
1、两个数的加减乘除单运算100+22;
上机操作和运行结果
25-66;
56*3;
100/3;
100/0;
2、两个数的加减乘除混合型运算2+3-5*6/2 输出 -10
3、带括号的混合运算
(3+4)*5/2+4输出21.5
4、带sin,cos, tan三角函数的混合运算2+8/4-sin30 输出 3.50001
5、在读文件中进行多步表达式的计算a=15+15
b=a*2+60
c=4*b-8+sina
a=30; b=120; c=232.5;
6、在读文件中进行多步表达式的计算a=4*sin30/tan45*cos60
b=6*(41-24)/(58+20)
c=a+b
六、异常处理及缺少的功能
1、对语法错误的两种处理方法:
(1) 对于易于校正的错误,如丢了逗号,分号等,指出出错位置,加以校正,继续进行分析。
(2) 对于难于校正的错误,给出错误的位置与性质,跳过后面的一些
文档评论(0)