编译原理算符优先文法//算符优先分析器源代码:#include<iostream>#include<iomanip>#defineMAX100usingnamespacestd;structStack//符号栈{chardata[MAX];inttop;};charTerminal[6]={'+','*','w','(',')','#'};//终结符集合charTable[6][6]={//算符优先关系表{'>','<','<','<','>','>'},{'>','>','<','<','>','>'},{'>','>','!','!','>','>'},{'<','<','<','<','=','!'},{'>','>','!','!','>','>'},{'<','<','<','<','!','='}};//判断是否为终结符,是返回其所在位置i,否则返回-1intIs_Vt(charch,charTerminal[6]){inti;for(i=0;i<6;i++){if(ch==Terminal[i])//输入符为终结符returni;}return-1;}//读入输入串,返回其长度intGetchar(intlength,charString[MAX]){inti;cout<<"*****输入字符串的长度length=";cin>>length;cout<<endl<<"*****该输入串为:";for(i=0;i<length;i++)cin>>String[i];returnlength;}voidPrintStack(Stack&st,inttop)//输出栈中的内容{for(inti=0;i<=top;i++)cout<<[i]<<"";cout<<"\t\t";}intmain(){Stackst;intlength=0,Len,k;charString[MAX],ch;Len=Getchar(length,String);//获得输入串intj=0;ch=String[j];//=0;[]='#';//将'#'入栈cout<<endl<<"**************************分析过程**************************"<<endl;cout<<"符号栈"<<setw(15)<<"当前符号"<<setw(15)<<"剩余输入串"<<setw(20)<<"移进或归约"<<endl;//输出格式while(!=1||ch!='#'){if(Is_Vt(ch,Terminal)!=-1)//输入符为终结符{k=Is_Vt(ch,Terminal);//获取分析表Table的第二个下标intm,t;//t指向终结符在栈中的位置if(Is_Vt([],Terminal)!=-1)//栈顶为终结符{m=Is_Vt([],Terminal);//获取分析表Table的第一个下标t=;}else//栈顶为非终结符,看top-1{m=Is_Vt([-1],Terminal);//获取分析表Table的第一个下标t=-1;}if(Tabl
编译原理算符优先文法 来自淘豆网www.taodocs.com转载请标明出处.