实验 7-8 预测分析表方法
一、实验目的
理解预测分析表方法的实现原理。
二、实验内容:
编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运
行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。
三、实验内容提示
1.算法数据构造:
构造终结符数组:char Vt[10][5]={“id”,”+”……};
构造非终结符数组:char Vn[10]={ };
构造 follow 集数组:char *follow[10][10]={ } (可将 follow 集与预测分析表合并存放)
数据构造示例(使用的预测分析表构造方法 1):
/*data1.h简单算术表达式数据*/
char VN[5][10]={"E","E'","T","T'","F"}; //非终结符表
int length_vn=5; //非终结符的个数
char VT[6][10]={"id","+","*","(",")","#"}; //终结符表
int length_vt=6; //终结符的个数
char Fa[8][10]={"TE'","+TE'","","FT'","*FT'","","(E)","id"};
//产生式表:0:E->TE' 1:E'->+TE' 2:E'->空
// 3:T->FT' 4:T'->*FT' 5:T'->空 6:F->(E) 7:F->id
int analysis_table[5][6]={
0, -1, -1, 0, -2, -2,
-1, 1, -1,-1, 2, 2,
3, -2 ,-1, 3, -2, -2,
-1, 5, 4, -1, 5, 5,
7, -2, -2 ,6, -2, -2};
//预测分析表,-1表示出错,-2表示该行终结符的follow集合,用于错误处理
(1) 预测分析表的构造方法 1
给文法的正规式编号:存放在字符数组中,从 0 开始编号,正规式的编号即为该正规式
在数组中对应的下标。
构造正规式数组:char P[10][10]={“E->TE’”,”E’->+TE’”,……..}; (正规式可只存储右半部
分,如 E->TE’可存储为 TE’ ,正规式中的符号可替换,如可将 E’改为 M )
构造预测分析表:int analyze_table[10][10]={ } //数组元素值存放正规式的编号,-1 表
示出错
(2)预测分析表的构造方法 2
可使用三维数组
Char analyze_table[10][10][10]={ }
或