资源描述:
《实验三预测分析.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、个人资料整理,仅供个人学习使用实验三:预测分析1.实验目的:掌握预测分析程序的分析、设计与实现的基本技术与一般方法。2.实验题目:编写并上机调试完成识别由下列文法所定义的表达式的预测分析程序。-T
2、T3.实验步骤分析消除左递归文法转化为:E->TE’E-’>+TE’
3、-TE’
4、∑->FT’T->*FT’’
5、/FT’->(E)
6、i∑F矚慫润厲钐瘗睞枥庑赖賃軔朧。2,判断是否为LL(1)文法:(1)求First(),Follow(),Select()集First(E)={(,i}Follow(E)={),#}First(E’)={+,-∑}Follow(E’)={),#
7、}First(T)={(,i}Follow(T)={+,-,),#}First(T’)={*,/,∑}Follow(T’)={+,-,),#}First(F)={(,i}Follow(F)={*,/,+,-,),#}Select(E->TE’)={(,i}Select(E->’+TE’)={+}Select(E->’-TE’)={-}Select(E->’∑)={∑,),#}Select(T->FT’)={(,i}Select(T->*FT’’)={*}Select(T->/FT’’)={/}Select(T->’∑)={∑,+,),#}Select(F->(E))
8、={(}Select(F->i)={i}由上可知,相同的左部产生式的Select集的交集为空,所以为LL(1)文法由Select集构造预测分析表i+-*/()#E->TE’[0]->TE’[5]E’->+TE’[11]->-TE’[12]->∑->∑T->FT’[20]->FT’[25]T’->∑->∑->*FT’[33]->/FT’[34]->∑->∑F->i[40]->(E)[45](2)设计算法流程框图:1/6个人资料整理,仅供个人学习使用程序参考源码/************************************//*程序名称:LL(1)文法分析程
9、序*//*程序用途:编译原理实验(三)*//*编写日期:20XX年11月9日*//*实验题目:识别下列表达式*//*E->E+T
10、E-T
11、T*//*T->T*F
12、T/F
13、F*//*F->(E)
14、i*//*程序版本:1.0Final*//*程序作者:黄记瑶B0226047*//*作者邮箱:*//************************************//************************************//*程序相关说明*//*A=E'B=T'*//*0=E1=E'2=T3=T'4=F*//*0=i1=+2=-3=*4=/5=(6
15、=)7=#*//************************************/#include"stdio.h"#include"malloc.h"structLchar{charchar_ch;structLchar*next;}Lchar,*p,*h,*temp,*top,*base;charcurchar;//存储当前待比较字符charcurtocmp;//存储当前栈顶字符2/6个人资料整理,仅供个人学习使用intright;//定义开关项inttable[5][8]={{1,0,0,0,0,1,0,0},{0,1,1,0,0,0,1,1},{1,
16、0,0,0,0,1,0,0},{0,1,1,1,1,0,1,1},{1,0,0,0,0,1,0,0}};//存储预测分析表,1为有产生式,0为没有inti,j;voidpush(charpchar)//入栈函数{temp=malloc(sizeof(Lchar));temp->char_ch=pchar;temp->next=top;top=temp;}voidpop(void)//出栈函数{curtocmp=top->char_ch;if(top->char_ch!='#')top=top->next;}voiddoforpush(intt)//根据数组下标计算的
17、值产生式入栈{switch(t){case0:push('A');push('T');break;case5:push('A');push('T');break;case11:push('A');push('T');push('+');break;case12:push('A');push('T');push('-');break;case20:push('B');push('F');break;case25:push('B');push('F');break;case33:push('B');push('F');push('*');break;case34:p