实验三 预测分析法判断算术表达式的正确性
学时数:6
一、实验目的
1、 理解语法分析器的构造方法和工作原理; 2、 理解自上而下语法分析方法;
3、 熟练掌握预测分析程序的构造方法。
二、实验内容
算术表达式的文法是G[E]:
E→E+T| T T→T*F| F F→(E)| id
用预测分析法按文法G[E]对算术表达式(包括+、*、()的算术表达式)进行语法
分析,判断该表达式是否正确。
三、实验步骤
1、准备:阅读课本有关章节,将上述算术表达式的文法改造成LL(1)文法;设计出预测分析表;按算法3.1(P56)编写程序。 2、 上机调试,发现错误,分析错误,再修改完善。
四、测试要求
1、 为降低难度,表达式中不含变量(只含单个无符号整数或i);
2、 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);
3、 测试用的表达式建议事先放在文本文件中,一行存放一个表达式,同时以分号结束。
同时将语法分析程序的输出结果写在另一个文本文件中;
4、 对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果。 5、程序输入/输出示例:
如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果: (a)1; 输出:正确 (b)1+2; 输出:正确
(c)(1+2)/3+4-(5+6/7); 输出:正确 (d)((1-2)/3+4 输出:错误,缺少右括号 (e)1+2-3+(*4/5) 输出:错误
五、实验报告要求
1、写出修改后LL(1)文法,所构造的预测分析表。
2、通过对核心代码做注释或通过程序流程图的方式说明预测分析程序的实现思想。 3、写出调试程序出现的问题及解决的方法。 4、给出测试的结果。
六、思考(选作)
文法G[E]所构造算术表达式只包含+和*。请修改文法和程序,使得该语法程序可判断包含减号和除号的算术表达式的正确性。
[实验指导]
将文法G[E]改造为LL(1)文法如下: G’[E]:
E → TE’
E’ → +TE’| ε T → FT’ T’→ *FT’|ε F → (E)| i
[补充说明]
预测分析法分析程序可以从网上下载,但要求:
(1)理解该程序,在实验报告中说明该程序所使用的文法和预测分析表; (2)实验报告要求同上