资源描述:
《[推荐精品]实验--预测分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验四语法分析(一)——预测分析技术实验目的:对给定的文法及如预测分析表,对输入的符号串进行识别,并给出符号串的识别过程,包括各步骤的栈内容,输入和输出。实验要求:首先M该详细掌握预测分析技术的原理,方法详细的分析步骤。其次要了解数据结构屮栈部分的内容,包括栈的特点及在预测分析屮的使用情况,预测分析其实可以看成是对两个基本的栈的操作,因此,对栈的有关知识要求比较熟悉。在实验前可复习数据结构屮栈的内容,这样可使木实验比较顺利的进行。下面以例说明最帶所应实现的功能输入文法规则O:Z::=BA1:A::=+BA2
2、:A::=e3:B::=DC4:C::=*DC5:C::=e6:D::=(Z)7:D::=i输入预测分析表!2:A::=£5:C::=eO:Z::=BA1:A::=+BA3:B::=DC4:C::=*DC6:D::=(Z)7:D::=i依次输入PTable[Z,+]PTablefZ,*]PTable[Z,(]PTable[Z,)]PTable[Z,i]PTable[Z,#]对应的规则编号:-1-10-10-1依次输入PTable[A,+]PTable[A,*]PTable[A,(]PTable[A,)JPT
3、able[A,i]PTable[A,#]对应的规则编号:1-1-12-12依次输入PTable[B,+]PTable[B,*]PTable[B,(]PTablc[B,)]PTable[B,i]PTable[B,#]对应的规则编号:-1-13-13-1依次输入PTable[C,+]PTable[C,*]PTable[C,(]PTable[C,)]PTable[C,i]PTable[C,#]对应的规则编号:54-15-15依次输入PTable[D,+]PTable[D,*JPTable[D,(]PTable[D
4、,)JPTable[D,i]PTable[D,#]对应的规则编号:6-17-1+*()■1#ZZ::=BAZ::=BAAA::=+BAA::=£A::=EBB::=DCB::=DCCC::=eC::=*DCC::=£C::=£DD::=(Z)D::=i请输入要识别的符号串:i+i*i步骤栈输入输出0#Zi+i*i#Z::=BA1#ABi+i*i#B::=DC2#ACDi+i*i#D::=i3#ACii+i*i#4#AC+i*i#C::=£5#A+i*i#A::=+BA6#AB++i*i#7#ABi*i#B:
5、:=DC8#ACDi*i#D::=i9#ACii*i#10#AC*i#C::=*DC11#ACD*引#12#ACDi#D::=i13#ACii#14#AC#C::=815#A#A::=e16##Success!该符号串是该文法的句子!输入要识别的符号串:ii步骤栈输入输出0#zii#Z::=BA1#ABii#B::=DC2#ACDii#D::=i3#ACiii#4#ACi#Failure!该符号串不是该文法的句了!参考程序#include#include#incl
6、ude#includestructRcgularity〃存放文法规则的数组结构{charregular[20];};classStack〃定义一个栈类{public:Stack(int=10);~Stack(){delete[]elements;}voidPush(constchar&item);charPop();charGetTopO;voidMakeEmplyO{top=-1;}intIsEmptyOconst}returntop==-l;}intIsFull
7、()const}returntop==maxSize-l;}voiddisplay();private:inttop;char*elements;intmaxSize;};Stack::Stack(ints):top(-l),maxSize(s){elements=newchar[maxSize];assert(elements!=O);}voidStack::Push(constchar&item){assert(!IsFull());elements[++top]=item;}charStack::Po
8、p(){assert(!IsEmpty());returnelements[top—];}charStack::GetTop()assert(!IsEmptyO);returnelements[top];}voidStack::display(){elements[top+1]=*0:cout«clcmcnts;}//////////////////////////////////////////////////