递归下降语法分析程序.doc

递归下降语法分析程序.doc

ID:53700648

大小:81.50 KB

页数:4页

时间:2020-04-06

递归下降语法分析程序.doc_第1页
递归下降语法分析程序.doc_第2页
递归下降语法分析程序.doc_第3页
递归下降语法分析程序.doc_第4页
资源描述:

《递归下降语法分析程序.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屮

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。