编译原理算符优先文法.doc_第1页
编译原理算符优先文法.doc_第2页
编译原理算符优先文法.doc_第3页
编译原理算符优先文法.doc_第4页
全文预览已结束

下载本文档

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

文档简介

/算符优先分析器源代码:#include#include#define MAX 100using namespace std;struct Stack /符号栈char dataMAX;int top;char Terminal6=+,*,w,(,),#; /终结符集合char Table66= /算符优先关系表, , , , , , , , , , !, !, , , , , , , !, !, , , , , , !, =;/判断是否为终结符,是返回其所在位置i,否则返回-1int Is_Vt(char ch,char Terminal6)int i;for(i=0;i6;i+)if(ch=Terminali) /输入符为终结符return i; return -1;/读入输入串,返回其长度int Getchar(int length,char StringMAX)int i;coutlength;coutendl*该输入串为:;for(i=0;iStringi; return length;void PrintStack(Stack &st, int top) /输出栈中的内容for(int i=0;i=top;i+) coutst.datai ;cout tt;int main()Stack st; int length=0,Len,k;char StringMAX,ch;Len=Getchar(length,String); /获得输入串int j=0;ch=Stringj; /指向第一个输入符st.top=0;st.datast.top=#; /将#入栈coutendl*分析过程*endl;cout符号栈setw(15)当前符号setw(15)剩余输入串setw(20)移进或归约endl; /输出格式while(st.top!=1 | ch!=#)if(Is_Vt(ch,Terminal)!=-1) /输入符为终结符k=Is_Vt(ch,Terminal); /获取分析表Table的第二个下标int m,t; /t指向终结符在栈中的位置if(Is_Vt(st.datast.top,Terminal)!=-1) /栈顶为终结符m=Is_Vt(st.datast.top,Terminal);/获取分析表Table的第一个下标t=st.top;else /栈顶为非终结符,看top-1m=Is_Vt(st.datast.top-1,Terminal);/获取分析表Table的第一个下标t=st.top-1;if(Tablemk= | Tablemk=) /栈顶符号的优先级小于等于输入符号,压栈PrintStack(st,st.top); /输出栈中内容coutchsetw(10); /输出当前符号for(int p=j+1;p=Len;p+) /输出剩余输入串coutStringp;coutttt移进endl; /输出下一步进行的操作st.top+;st.datast.top=ch; /输入符移进栈中j+;ch=Stringj; /指向下一输入符else if(Tablemk=!) /两终结符的优先关系不确定coutendl*分析出错!*endl;return 0;else /栈顶符号的优先级大于输入符,归约int q; /表示分析表Table的行if(Is_Vt(st.datat-1,Terminal)!=-1) /终结符相邻符号也是终结符q=Is_Vt(st.datat-1,Terminal);/获得分析表Table的行t=t-1; /获得分析表Table的列else /t-1位置是一个非终结符q=Is_Vt(st.datat-2,Terminal);t=t-2;while(Tableqm!=)m=q;if(Is_Vt(st.datat-1,Terminal)!=-1) /终结符相邻符号也是终结符q=Is_Vt(st.datat-1,Terminal);/获得分析表Table的行t=t-1; /获得分析表Table的列else /t-1位置是一个非终结符q=Is_Vt(st.datat-2,Terminal);t=t-2;PrintStack(st,st.top);coutchsetw(10);for(int p=j+1;p=Len;p+)coutStringp;coutttt归约endl;st.top=t+1;st.datast.top=N;elsecoutendl*该输入串不是文法的句子!*endl;return 0;PrintStack(st,st.top);cou

温馨提示

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

评论

0/150

提交评论