资源描述:
《语法分析程序报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、xx理工大学《编译原理》题目语法分析程序姓名:学号:班级:8一、实验目的编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。二、实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1待分析的简单语言的语法用扩充的BNF表示如下:⑴<程序>::=begin<语句串>end⑵<语句串>::=<语句>{;<语句>}⑶<语句>::=<赋值语句>⑷<赋值语句>::=ID:=<表达式>⑸<表达式>::=<项>{+<项>
2、-<项>}⑹<项>::=<因子>{*<因子>
3、/<因子>⑺<因子>::=ID
4、NU
5、M
6、(<表达式>)2.2实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。例如:输入begina:=9;x:=2*3;b:=a+xend#输出success输入x:=a+b*cend#输出error2.3语法分析程序的酸法思想⑴主程序示意图如图2-1所示。置初值调用scaner读下一个单词符号调用lrparser结束图2-1语法分析主程序示意图⑵递归下降分析程序示意图如图2-2所示。8⑶语句串分析过程示意图如图2-3所示。是否begin?调用statement函数
7、否是是否;?调用scaner否调用语句串分析程序是调用scaner是否end?否调用statement函数是调用scaner出错处理syn=0&&kk=0?否是出错处理打印分析成功图2-2递归下降分析程序示意图图2-3语句串分析示意图⑷statement语句分析程序流程如图2-4、2-5、2-6、2-7所示。调用term函数是否标识符?否调用expression函数调用scaner是否:=?调用scaner是否+,-?否否是调用scaner调用term函数出错处理出错处理图2-4statement语句分析函数示意图图2-5express
8、ion表达式分析函数示意图8调用scaner调用factor函数出错处理是否*,/?调用factor函数是否标识符?是否否是否整常数?是是否是否(?否是调用scaner是否)?调用expression函数图2-6term分析函数示意图否出错处理调用scaner调用scaner是图2-7factor分析过程示意图三、语法分析程序的C语言程序源代码#include"stdio.h"#include"string.h"charprog[100],token[8],ch;char*rwtab[6]={"begin","if","then","w
9、hile","do","end"};intsyn,p,m,n,sum;intkk;factor();expression();yucu();term();statement();lrparser();scaner();main(){p=kk=0;printf("Grade:05Class:03Name:QiyubingNumber:200507096");printf("----Pleaseinputthestringendwith'#':--------");8do{scanf("%c",&ch);prog[p++]=
10、ch;}while(ch!='#');p=0;scaner();lrparser();getch();}lrparser(){if(syn==1){scaner();/*读下一个单词符号*/yucu();/*调用yucu()函数;*/if(syn==6){scaner();if((syn==0)&&(kk==0))printf("SUCCESS!");}else{if(kk!=1)printf("Sorry,thestringhaven'tgotan'end'!");kk=1;}}else{printf("Sorry,haven
11、'tgota'begin'!");kk=1;}return;}yucu(){statement();/*调用函数statement();*/while(syn==26){scaner();/*读下一个单词符号*/if(syn!=6)statement();/*调用函数statement();*/}return;}statement(){if(syn==10){scaner();/*读下一个单词符号*/8if(syn==18){scaner();/*读下一个单词符号*/expression();/*调用函数statement();*/
12、}else{printf("Sorry,thesing':='iswrong!");kk=1;}}else{printf("Sorry,wrongsentence!");kk=1;}return;}