实验四 LR 分析法判断算术表达式的正确性
学时数:4-6
一、实验目的
1、 理解自底向上语法分析方法;
2、 用 LR 分析技术实现语法分析器;
3、 熟练掌握 LR 分析程序的构造方法。
二、实验内容
算术表达式的文法是 G[E]:
E→E+T| T
T→T*F| F
F→(E)| i
用 LR 分析法按文法 G[E]对算术表达式(包括+、*、()的算术表达式)进行语法分
析,判断该表达式是否正确。
三、实验步骤
1、准备:阅读课本有关章节;设计出文法 G[E]的 SLR 分析表(参见 P121 例 5.11,
其 SLR 表是 P123 表 5-13);
2、按算法 5.3(P111)编写程序。(思考:LR 分析程序包括四种动作——移进、归约、
接受、出错,详见 P111,这些动作如何实现?)
四、测试要求
1、 为降低难度,表达式中不含变量(只含单个无符号整数);
2、 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);
3、 测试用的表达式建议事先放在文本文件中,一行存放一个表达式,同时以分号结束
同时将语法分析程序的输出结果写在另一个文本文件中;
4、程序输入/输出示例:
输入如下表达式(以分号为结束)和输出结果:
(a)i; 或 1;
输出:正确
(b)i+i; 或 1+2;
输出:正确
(c)(i+i)*i+i-(i+i*i); 或 (1+2)*3+4-(5+6*7);
输出:正确
(d)((i+i)*i+i; 或 ((1+2)*3+4;
输出:错误,缺少右括号
(e)i+i+i+(*i/i); 或 1+2+3+(*4/5)
输出:错误
5、对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果。
实验报告填写要求:学生课前填写好实验预习部分 (实验目的、实验内容和实验环境),无预习,不允许做
实验。实验完成后填写实验步骤及实验测试数据,并进行实验结果分析,指导老师在实验报告上签字。