资源描述:
《递归下降语法分析程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、includeHstdio.hH#include"string.h"charprog[100],token[8],ch;char*rwtab⑹二{“begin”,”if‘,“then”,”while”,“do”,”end”};intsyn,p,m,n,sum;intkk;factor();expression();yucu();term();statement();lrparser();scaner();main(){p=kk=0;printf("pleaseinputastring(endwith*#'):");do{scanf("
2、%c",&ch);prog[p++]=ch;)while(ch!=#');p=0;seaner();lrparser();getchar();}lrparser(){if(syn==1){scaner();/*读下一个单词符号*/yucu();/*调用yucu()函数;*/if(syn==6){scaner();if((syn==0)&&(kk==O))printf("success!n);}else{if(kk!=l)printf(nthestringhaven*tgota'end'IXn");kk=l;}1else{printfC'h
3、aven'tgota'begin1!");kk=l;return;yucu(){statement();/*调用函数statement();*/while(syn==26){scaner();/*读下一个单词符号*/if(syn!=6)statement();/*调用函数statement。;*/}return;}statementC){if(syn==10){scaner();/*读下一个单词符号*/if(syn==18){scaner();/*读下一个单词符号*/expression();/*调用函数statement。;*/}els
4、e{printf("thesingiswrong!n);kk=l;else{printf("wrongsentence!");kk=l;}return;}expression(){term();while((syn==13)ll(syn==14)){scaner();/*读下一个单词符号*/term();/*调用函数term();*/return;}term(){factor();while((syn==15)ll(syn==16)){seaner();factor();/*读下一个单词符号旬/*调用函数factor();*/}ret
5、urn;factor(){if((syn==10)ll(syn==11))scaner();elseif(syn==27){scaner();/*读下一个单词符号*/expression();/*调用函数statement();*/if(syn==28)scaner();/*读下一个单词符号*/else{printfC'theerroron'('");kk=l;)}else{printf(Htheexpressionerror!n);kk=l;}return;}seane「(){sum=0;for(m=0;mv&m++)token[m
6、++]=NULL;m=0;ch=prog[p++];while(ch==,)ch=prog[p++];if(((ch<=,z,)&&(ch>=,a,))ll((ch<=T)&&(ch>=,A,))){while(((ch<='z')&&(ch>='a,))H((ch<='Z')&&(ch>='A'))ll((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}P";syn=10;token[m++]= ,;fo「(n二0;nv6;n++)if(strcmp(token,rwtab[n])==0
7、){syn=n+1;break;}}elseif((ch>='O')&&(chv=9)){while((ch>=,0')&&(ch<=,9,)){sum二sum*10+ch」(y;ch=prog[p++];P";syn=l1;}elseswitch(ch){caseN':m=O;ch=prog
8、p++
9、;if(ch==*>,){syn=21;}elseif(ch=='='){syn=22;}else{syn=20;P-;}break;case、':m=0;ch=prog[p++];if(ch==='){syn=24;}else{syn=23;
10、P・・;}break;case丫:m=0;ch=prog[p++];if(ch=='='){syn=18;1else{syn=17;p・・;)break;case屮