《c语言实现算符优先语法分析》由会员分享,可在线阅读,更多相关《c语言实现算符优先语法分析(5页珍藏版)》请在人人文库网上搜索。
1、includechar prog100,zhongjian100,shu500;char ch,zh;int syn,p,q,a,b,c,d; /p指向prog,q指向zhongjianint table88=1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,0, 1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,-1,-1,-1,-1,-1,0,-1,-1;/存储算符优先关系表,大于为1,小于或等于为-1,其它为0表示出错char zh。
2、an100;/数组栈int z,j;/z为栈顶指针,j为zhongjian数组指针void push(char ch)/入栈zhanz+=ch;void pop()/出栈z-;void putzhan()/打印栈内字符for(int i=0;i=j;m-)shuc+=zhongjianm;for(int i=z-1;i0;i-)shuc+=zhani;zh=ding2();if(zh=i) /当前比较为i,出栈一次pop(); else /当前比较不为i,出栈三次pop(); pop(); pop(); push(E); /归约到E printf(归约n);shuc+= ;shuc+=;shu。
3、c+=-;shuc+= ;elsesyn=-1;break;zh=ding();ch=zhongjianj;void loadch()/读入所有字符串int i=0;printf(请输入要进行算符优先分析的字符串:n);doch=getchar();progi+=ch;while(ch!=#);void scaner()syn=1;ch=progp+;while(ch= |ch=n)ch=progp+;switch(ch)case+:zhongjianq+=+;break;case-:zhongjianq+=-;break;case*:zhongjianq+=*;break;case/:zho。
4、ngjianq+=/;break;case(:zhongjianq+=(;break;case):zhongjianq+=);break;casei:zhongjianq+=i;break;case#:zhongjianq+=#;syn=0;break;default: syn=-1;break;void saomiao()p=0;q=0;doscaner();if(syn=-1)printf(输入符号有误!n);break;while(syn!=0);void main()loadch();saomiao();if(syn=0)chu();analyse();printf(#Et#t结束n);if (syn=0)printf(该字符串可被文法识别n);printf(E);for(int i=c;i=0;i-)printf(%c,shui);printf(n);elseprintf(该字符串不可被文法识别n。