算符优先分析器.doc_第1页
算符优先分析器.doc_第2页
算符优先分析器.doc_第3页
算符优先分析器.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

/文法为/(0)E #E#/(1)E E+T /(2)E T/(3)T T*F /(4)T F/(5)F PF /(6)F P/(7)P (E) /(8)P i#include#includeusing namespace std;#define MAX 100char SMAX; /分析栈Schar shuruMAX,yuMAX; /shuruMAX存放输入的字符串,yuMAX存放剩余串void scanner(); /扫描分析输入串函数int panyouxian(char x); /判断优先关系符函数void shengyuchuan();/剩余字符串函数int k;char youxian77=,$,$,$,$,为大于,为小于,=为等于,$为空格void main() int l,j; cout请输入一个字符串:; cin.get(shuru,MAX); /将输入的字符串存到数组 cout步骤 栈 优先关系 当前符号 剩余输入串 移进或归约endl; k=0; Sk=#; Sk+1=0; l=strlen(shuru); /求输入字符串的长度 for(j=0;jl;j+) yuj=shuruj; yuj=0; scanner(); void scanner() /扫描分析输入串 int i,j,l,h1,l1,h2,l2,h3,l3,y1,y2,r1,r2; int step=0;/分析步骤数 char a; /存放正在分析的字符 char p1,Q,p2; l=strlen(shuru); /算出输入串长度 for(i=0;il;i+) a=shurui; if(Sk=+|Sk=*|Sk=|Sk=i|Sk=(|Sk=)|Sk=#) j=k; else j=k-1; h1=panyouxian(Sj);/ 从优先关系表中查出Sj和a的优先关系 if(a=+|a=*|a=|a=i|a=(|a=)|a=#) l1=panyouxian(a); else /如果句子含有不是终结符集合里的其它字符,不合法 cout错误!不合法的句子!) loop: Q=Sj; if(Sj-1=+|Sj-1=*|Sj-1=|Sj-1=i|Sj-1=(|Sj-1=)|Sj-1=#) j=j-1; else j=j-2; h2=panyouxian(Sj); l2=panyouxian(Q); p1=youxianh2l2; if(p1=) /Sj+1Sk归约为F k=j+1; shengyuchuan(); step+;coutleft(stepsetw(6)setw(10)Ssetw(10)p1setw(10)asetw(5)rightyusetw(15)归约endl;i-; Sk=F;r1=strlen(S); for(r2=k+1;r2r2;r2+)Sr2=0;/多个字符归约,把栈顶后面的舍弃y1=strlen(yu); for(y2=0;y2y1;y2+) yuy1-y2=yuy1-y2-1; yu0=i; else goto loop; else if(p1=) /移进 如果上一步是不归约,剩余的字符串减少一个 shengyuchuan(); shurul=0; step=step+1; coutleft(stepsetw(6)setw(10)Ssetw(10)p1setw(10)asetw(5)rightyusetw(15)移近endl; k=k+1; Sk=a; else if(p1=) h3=panyouxian(Sj); l3=panyouxian(#); p2=youxianh3l3; if(p2=) shengyuchuan();step+;coutleft(stepsetw(6)setw(10)Ssetw(10)p1setw(10)asetw(5)rightyusetw(15)接受endl;cout合法的句子!endl;break; elsek=k+1;Sk=a; else cout出错!endl; break; void shengyuchuan() int i,j; i=strlen(yu); for(j=0;ji;j+) yuj=yuj+1; yui-1=0;int panyouxian(char x)int m;switch(x)case+:m=0;break;case*:m=

温馨提示

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

评论

0/150

提交评论