实验预测分析_第1页
实验预测分析_第2页
实验预测分析_第3页
实验预测分析_第4页
实验预测分析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四 语法分析(一一一预测分析技术实验目的:对给定的文法及其 预测分析表,对输入的符号串进行识别,并给出符号串的识别 过程,包括各步骤的栈内容,输入和输出。实验要求:首先应该详细掌握预测分析技术的原理,方法详细的分析步骤。其次要了解数据 结构中栈部分的内容,包括 栈的特点及在 预测分析中的使用情况,预测分析其 实可以看成是 对两个基本的栈的操作,因此,对栈的有关知 识要求比较熟悉。 在实验前可复习数据结构中栈的内容,这样可使本实验比较顺利的进行。b5E2RGbCAPF面以例说明最后所应实现的功能O:Z:=BA1:A:=+BA2:A:=3:B:=DC 4:C:=*DC 5:C:= 6:D:=(

2、Z7:D:=i输入预测分析表!0:Z:=BA1:A:=+BA2:A:=3:B:=DC 4:C:=*DC 5:C:= 6:D:=(Z7:D:=i依次输入 PTableZ,+ PTableZ,*输入文法规则 PTableZ,( PTableZ, PTableZ,i PTableZ,# p1EanqFDPw对应的规则编号:-1 -1 0-10-1依次输入 PTableA,+ PTableA,* PTableA,( PTableA, PTableA,i PTableA,# DXDiTa9E3d 对应的规则编号:1 -1 -12-12依次输入 PTableB,+ PTableB,* PTableB,(

3、PTableB, PTableB,i PTableB,#RTCrpUDGiT 对应的规则编号:-1 -1 3-13-1依次输入 PTableC,+ PTableC,* PTableC,( PTableC, PTableC,i PTableC,#5PCzVD7HxA 对应的规则编号:5 4-1 5-15依次输入 PTableD,+ PTableD,* PTableD,( PTableD, PTableD,i PTableD,#jLBHrnAiLg 对应的规则编号:-1 -1 6-17-1+ *( i#ZZ:=BAZ:=BAA A:=+BAA=A:= BEJ:=DCB:=DCCC:= C:DCC:

4、= C:= D=D:=(ZD:=i请输入要识别的符号串:i+i*i 步骤栈 输入输出0 #Z i+i*i# Z:=BA1 #AB i+i*i# B:=DC2 #ACD i+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:=DC8#ACDi*i#D:=i9#ACii*i#10#AC*i#C:=*DC11#ACD*i#12#ACDi#D:=i13#ACii#14#AC#C:= 15#A#A:= 16# Success!该 符号串是 该 文法的句子 输入要 识别的符号串 :ii步骤栈输入输出0#Zii# Z:=BA1

5、#ABii#B:=DC2#ACDii#D:=i3#ACiii#4#ACi#Failure!该 符号串不是 该 文法的句子 ! 参考程序#include#include#include#includestruct Regularity/存放文法 规则 的数 组结构 xHAQX74J0Xchar regular20 。class Stack/定义一个 栈类public:Stack(int=10 。Stack( deleteelements。 void Push(const char& item 。char Pop(。char GetTop(。void MakeEmpty(top=-1 。 int

6、IsEmpty( const return top=-1 。int IsFull( const return top=maxSize-1。 void display(。private:int top。char* elements。int maxSize。Stack:Stack(int s:top(-1,maxSize(s elements=new charmaxSize 。 assert(elements!=0。void Stack:Push(const char& itemassert(!IsFull( 。 elements+top=item 。char Stack:Pop(assert(!

7、IsEmpty( 。return elementstop- 。char Stack:GetTop(assert(!IsEmpty( 。 return elementstop。void Stack:display(elementstop+1=0 。 cout Zzz6ZB2Ltkint i,j,size=0 。for(i=0。 ivlength。 i+for(j=0 。 jvsize。 j+if(VNj=Arrayi.regular0break。if(j=sizeVNsize=Arrayi.regular0 。size+。VNsize=0 。void FindVT(char VT,Regular

8、ity Array,int length dvzfvkwMI1int i,j,k,m,size=0 。for(i=0。 ivlength。 i+for(j=4 。 jvstrlen(Arrayi.regular 。 j+for(k=0 。 kvlength。 k+if(Arrayk.regular0=Arrayi.regularjbreak。 rqyn14ZNXIif(k=length&Arrayi.regularj!=e for(m=0 。 mvsize。 m+ if(VTm=Arrayi.regularjbreak。if(m=sizeVTsize=Arrayi.regularj 。size

9、+。VTsize=0 。VTsize=# 。VTsize+1=0 。int FindRegularity(int PTable20,char VN,char VT,char temp1,chartemp2EmxvxOtOcoint i,j 。int size1=strlen(VN 。int size2=strlen(VT 。for(i=0 。 ivsize1。 i+if(VNi=temp1 break。for(j=0 。 jvsize2。 j+if(VTj=temp2 break。return PTableij 。int CheckVT(char VT,char tempint i。int s

10、ize=strlen(VT 。for(i=0 。 ivsize。 i+if(VTi=temp return 1。return 0void Display(Regularity Array,int lengthcout 。int i 。for(i=0 。 icouti: 。 cout%3=0 coutendl 。coutint i,j 。char temp20 。int size=strlen(TD 。for(i=index,j=0 。 ivsize。 i+,j+tempj=TDi 。tempj=0 。coutvvtemp 。void InputRegularity(Regularity Arr

11、ay,int& length,char VN,char VT SixE2yXPq5int i。coutvv请输入文法规则的数目:。cinlength。for(i=0 。 ivlength。 i+coutvv请输入编号为vvivv的规则:。cinArrayi.regular 。FindVN(VN,Array,length 。 FindVT(VT,Array,length 。void InputPredictTable(Regularity Array,int length,int PTable20,char VN,char VT 6ewMyirQFL int i,j。int size1=strl

12、en(VN 。int size2=strlen(VT 。coutvv请输入预测分析表!vvendl。Display(Array,length 。for(i=0 。 icoutvv依次输入。for(j=0 。 j coutvvPTablevvVNivv,vvVTjvv 。coutvv对应的规则编号:。for(j=0 。 jvsize2。 j+ cinPTableij 。void ShowRegularity(Regularity Array,int length Display(Array,length 。void ShowPredictTable(Regularity Array,int PT

13、able20,char VN,char VT kavU42VRUs int i,j 。int size1=strlen(VN 。int size2=strlen(VT 。 coutvvresetiosflags(ios:leftcoutvvsetiosflags(ios:right 。coutvvsetw(3vv 。for(i=0 。 ivsize2。 i+coutvvsetw(10vvVTi coutvvendl。for(i=0 。 ivsize1。 i+coutvvsetw(6vvVNi 。for(j=0 。 jvsize2。 j+if(PTableij=0coutvvsetw(10vvA

14、rrayPTableij.regularelsecoutvvsetw(10vv 。coutvvendl。void RecogniseString(Regularity Array,intlength,int PTable20,char VN,charVT,Stack&stacky6v3ALoS89int i,index=0,count=0 char TD20 。 stack.MakeEmpty( 。stack.Push(#。stack.Push(Array0.regular0 。Display(Array,length 。coutvv请输入要识别的符号串:。cinTD 。i=strlen(TD

15、 。TDi=# 。TDi+1=0 。cout 。cout 步骤 。cout 。cout 栈。cout 。 cout 。coutvv输入。 cout 。 coutvvsetiosflags(ios:left 。coutvvsetw(4vv 。coutvvsetw(6vv 输出 vvendl。while(1coutvvsetw(5vvcount 。coutvvsetw(4vv 。coutvvsetw(6 。stack.display( 。coutvvresetiosflags(ios:left 。 coutvvsetiosflags(ios:right 。coutvvsetw(10。Display

16、String(TD,index 。 coutvvresetiosflags(ios:right 。coutvvsetiosflags(ios:left 。if(stack.GetTop(=#&TDindex=#coutvvsetw(4vv 。coutvvsetw(6vvSuccess! 。 coutvvendl。coutvv该符号串是该文法的句子!vvendlbreak。elseif(CheckVT(VT,stack.GetTop(if(stack.GetTop(!=TDindexcout 。coutFailure! 。 coutendl 。cout 该符号串不是 该文法的句子 !。 inde

17、x+ 。cout,TDindex 。 M2ub6vSTnP if(i=-1 cout 。coutFailure! 。 coutendl 。coutvv该符号串不是该文法的句子!vvendl。break。elsecout 。cout。if(Arrayi.regular4!= for(int j=strlen(Arrayi.regular-1 。 j=4。 j-stack.Push(Arrayi.regularj 。count+。coutRegularity Array20 char VN20 。char VT20 。int PTable2020 。 int length=0 。 Stack st

18、ack(20。 int sel。int sign1=0,sign2=0 。 aaa:/定 义数组 存放文法 规则 eUts8ZQVRd /定义数组存放非终结符号 sQsAEJkW5T /定义数组存放 终结符号 GMsIasNXkA /定义二维数组存放 预测 分析表 TIrRGchYzg/显 示用户 界面 lzq7IGf02E/创建栈用于识别 符号串 7EqZcWLZNXcout1endlcout2endlcout3endlcout4endlcout5endl 。cout6sel。while(sel!=1&sel!=2&sel!=3&sel!=4&sel!=5&sel!=6。 zvpgeqJ1hkswitch(selcase1:/输入文法 规则 NrpoJac3v1sign1=1。InputRegularity(Array,length,VN,VT 。 break。case2:/输入预测 分析表 1nowfTG4KIif(sign1=0cout请先输入文法规则! 。break。case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论