题目描述
掌握预测分析程序的分析、设计与实现的基本技术与一般方法。
编写识别由下列文法所定义的表达式的预测分析程序。
E
→
E
+
T
∣
E
−
T
∣
T
E rightarrow E+T | E-T | T
E→E+T∣E−T∣T
T
→
T
∗
F
∣
T
/
F
∣
F
T rightarrow T*F | T/F | F
T→T∗F∣T/F∣F
F
→
(
E
)
∣
i
F rightarrow (E) | i
F→(E)∣i
输入:从键盘输入表达式,或每行含有一个表达式的文本文件。其中,表达式中含有任意的十进制数或十六进制数,并以#结束。
如:80-5H+(6+1)+4h/2#。
题目分析
本次实验为运用编程实现算符优先文法分析(自底向上语法分析,非规范归约)。
判断给定的文法是OPG文法,随后构造出FIRSTVT和LASTVT集合,以此构造出终结符之间的优先关系,产生算法优先分析表。
为了便于编程实现,采用了双向链栈。细节问题已在代码注释给出
C++
#include
#include
#include
#include
#include
#include
#include