算符优先文法处理算术表达式.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二:算符优先文法处理算术表达式 一、 实验目的:算术表达式的文法可以是(你可以根据需要适当改变) : E t E+E|E-E|E*E|E/E| (E) |i 根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。 二、 实验时间:上机二次。 三、 实验过程和指导: (一) 准备:1?阅读课本有关章节,花一周时间确定算术表达式的文法,设计出算符优先关 系表;2?考虑好设计方案;3?设计出模块结构、测试数据,初步编制好程序。 (二) 上课上机:上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案 与学生进行探讨,以修改方案和代码。 (三) 程序要求: 程序输入/输出示例: 如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果: (1) 10; 输出:正确 (2) 1+2; 输出:正确 (3) (1+2)/3+4-(5+6/7); 输出:正确 (4) ((1-2)/3+4 输出:错误 (5) 1+2-3+(*4/5) 输出:错误 TOC \o 1-5 \h \z 注意:1?为降低难度,表达式中不含变量(只含无符号整数) ; 2?如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好) ; 3?测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预 期的输出结果写在另一个文本文件中,以便和输出进行对照; 4?对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果,计算过程用 浮点表示,但要注意不要被 0除。 程序思路(仅供参考): 1?借用实验一的结果,可将其中的取字符函数几乎原封不动地移植过来,其中的分割和分析 单词的方法可借用过来分割现在这个实验的运算符、常量和变量。 2?模块结构:(1)初始化:设立算符优先关系表(或优先函数) 、初始化变量空间(包括堆 栈、结构体、数组等);(2)控制部分:将一个表达式从文件中读出; (3 )词法分析:将表 达式分割成单词序列;(4)利用算符优先文法进行表达式处理: 根据算符优先关系表对表达 式单词序列进行堆栈操作,如果遇到错误则显示错误信息。 (四) 练习该实验的目的和思路: 程序比较复杂,需要利用到大量的编译原理, 也用到了大量编程技巧和数据结构, 通过这个 练习可极大提高编程能力。程序规模大概为 250行。本实验的结果可作为课程设计的基础。 通过练习,掌握对表达式进行处理的一种方法。 (五) 为了能设计好程序,主意以下事情: 1?模块设计:将程序分成合理的多个模块(函数) ,每个模块做具体的同一事情。 2?写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 3.编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。 四、上交: 程序源代码(源代码中以注释的形式说明程序的功能,主文件名为 by3); 已经测试通过的测试数据 10 组(全部存在 test3.txt 文件中,以“第一组输入 /输出 /第二组 输入/输出/第三组输入/输出……”的格式存放); 实验报告按照提供的模板填写: (1)功能描述:该程序具有什么功能? (2) 程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用 关系图、程序总体执行流程图(参考课本第二章) 。 (3) 实验过程记录:出错次数、出错严重程度、解决办法摘要。 (4) 实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调 试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你 的收获有哪些?

文档评论(0)

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

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

1亿VIP精品文档

相关文档