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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。
四、上交: 1.程序源代码(源代码中以注释的形式说明程序的功能,主文件名为 by3); 2.已经测试通过的测试数据 10 组(全部存在 test3.txt 文件中,以“第一组输入/输出/第二组 输入/输出/第三组输入/输出……”的格式存放); 3. 实验报告按照提供的模板填写: (1)功能描述:该程序具有什么功能? (2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用 关系图、程序总体执行流程图(参考课本第二章)。 (3)实验过程记录:出错次数、出错严重程度、解决办法摘要。 (4)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调 试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你 的收获有哪些?
Байду номын сангаас
实验三:算符优先文法处理算术表达式
一、实验目的:算术表达式的文法可以是(你可以根据需要适当改变): E→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) 输出:错误 注意:1.为降低难度,表达式中不含变量(只含无符号整数); 2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 3.测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预 期的输出结果写在另一个文本文件中,以便和输出进行对照; 4.对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果,计算过程用 浮点表示,但要注意不要被 0 除。 程序思路(仅供参考): 1.借用实验一的结果,可将其中的取字符函数几乎原封不动地移植过来,其中的分割和分析 单词的方法可借用过来分割现在这个实验的运算符、常量和变量。 2.模块结构:(1)初始化:设立算符优先关系表(或优先函数)、初始化变量空间(包括堆 栈、结构体、数组等);(2)控制部分:将一个表达式从文件中读出;(3)词法分析:将表 达式分割成单词序列;(4)利用算符优先文法进行表达式处理:根据算符优先关系表对表达 式单词序列进行堆栈操作,如果遇到错误则显示错误信息。 (四)练习该实验的目的和思路: 程序比较复杂,需要利用到大量的编译原理,也用到了大量编程技巧和数据结构,通过这个 练习可极大提高编程能力。程序规模大概为 250 行。本实验的结果可作为课程设计的基础。 通过练习,掌握对表达式进行处理的一种方法。 (五)为了能设计好程序,主意以下事情: 1.模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。 2.写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。
相关文档
最新文档