编译原理实验-四.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验-四 编译原理实验-四 PAGE 编译原理实验-四 实验四 算符优先文法处理算术表达式与赋值语句 一、实验目的 算术表达式和赋值语句的文法可以是(你可以根据需要适当改变): S→i=E E→E+E|E-E|E*E|E/E|(E)|i 根据算符优先分析法,将赋值语句进行语法分析,翻译成等价的一组基本操作,每一基本操作用四元式表示。 二、估计实验时间 1.课余准备15小时;2.上机三次6小时;3.完成实验报告5小时。 三、实验过程和指导 (一)准备:1.阅读课本有关章节,花一周时间确定算术表达式的文法,设计出算符优先关系表;2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。 (二)上课上机:上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行探讨,以修改方案和代码。 (三)程序要求: 程序输入/输出示例: 如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果: (1)a = 10; 输出:(=, a,10,-) (2)b = a + 20; 输出:(=,r1,20,-) (+,r2,a,r1) (=,b,r2,-) 注:此例可以进行优化后输出(不作要求):(+,b,a,20) (3)c=(1+2)/3+4-(5+6/7); 输出:(+,r1,1,2) (/,r2,r1,3) (/,r3,6,7) (+,r4,5,r3,) (+,r5,r2,4) (-,r6,r5,r4) (=,c,r6,-) 注:输出格式有多种,如上面第二个括号可改为(/,r1,r1,3)以节约变量(当然后面相应的变量引用也要改变)。 注意: 1.表达式中允许使用运算符(+-*/)、分割符(括号)、常量(无符号整数)和变量; 2只要能表达正确的计算过程,任何输出方式都可以; 3.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 4.测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照; 5.其中临时变量名可不用r1,r2,也可用别的形式代替,如r[1],r[2]等。 6.为了降低难度,文法可适当降低要求,如只处理含有+-()的表达式,也可只处理+-*/的表达式; 7.对学有余力的同学,可增加一个函数来计算四元式,最后输出被赋值变量的值(如果表达式中含有变量,则设它为0),计算过程用浮点表示,但要注意不要被0除。 程序思路(仅供参考): 1.借用实验二的结果,可将其中的取字符函数几乎原封不动地移植过来,其中的分割和分析单词的方法可借用过来分割现在这个实验的运算符、常量和变量。 2.模块结构: (1)初始化:设立算符优先关系表(或优先函数)、初始化变量空间(包括堆栈、结构体、数组、临时变量等); (2)控制部分:将一个表达式从文件中读出; (3)词法分析:将表达式分割成单词序列; (4)利用算符优先文法进行表达式处理:根据算符优先关系表(或优先函数)对表达式单词序列进行堆栈(或其他)操作,得到并保存四元组,如果遇到错误则显示错误信息; (5)输出四元组。 (四)练习该实验的目的和思路: 程序相当复杂,需要利用到大量的编译原理,也用到了大量编程技巧和数据结构,通过这个练习可大大提高软件开发能力。程序规模大概为400行。本实验的结果可作为课程设计的基础。通过练习,掌握对表达式进行处理的一种方法。 (五)为了能设计好程序,主意以下事情: 1.模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。 2.写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 3.编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。 四、上交 1.程序源代码(主文件名为by3); 2.已经测试通过的测试数据10组(全部存在文件中,以“第一组输入/输出/第二组输入/输出/第三组输入/输出……”的格式存放); 3.实验报告: (1)功能描述:该程序具有什么功能? (2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图、程序总体执行流程图(参考课本第二章)。 (3)实验过程记录:出错次数、出错严重程度、解决办法摘要。 (4)实验总结:你在编程过程中花时多少多少时间在纸上设计多少时间上机输入和调试多少时间在思考问题遇到了哪些难题你是怎么克服的你对你的程序的评价你的收获有哪些 五、参考源代码 ... ... h == #) o][Peek(n0).No]; if(r == ) h == E Peek(1).ch == # Token[ipToken].ch == #) return TRUE; else

文档评论(0)

186****7897 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档