《编译原理》实验报告2008年11月20日姓名孙丽君班级06行知计算机网络技术学号06202135课程名称编译原理实验项目名称语法分析指导教师郑豪一、实验目的:编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。利用C语言编制递归下降分析程序,并对简单语言进行语法分析。二、实验原理(可以流程图的形式出现,加以文字说明)1.待分析的简单语言的语法2.用扩充的BNF表示如下:(1)程序::=begin语句串end(2)语句串::=语句{;语句}(3)语句::=赋值语句(4)赋值语句::=ID:=表达式(5)表达式::=项{+项|—项}(6)项::=因子{*因子|/因子}(7)因子::=ID|NUM|(表达式)3.实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。例如:置初值调用scaner读下一个单词符号调用lrParser结束图c.3语法分析主程序示意图输入begina:=9;x:=2*3;b:=a+xend#输出success输入x:=a+b*cend#输出error4.语法分析程序的算法思想(1)主程序示意图如图C.3所示。(2)递归下降分析程序示意图如图C.4所示。(3)语句串分析过程示意图如图C.5所示。(4)statement语句分析函数流程如图C.6.C.7.C.8C.9所示。是否begin?是否调用scaner调用语句串分析函数是否end?调用scanersyn=0&&kk=0?打印分析成功否是出错处理是图c.4递归下降分析程序示意图否是调用statement函数是否;?调用scaner调用statement函数出错处理图c.5语句串分析示意图是否是图c.6statement语句分析函数示意图否是图c.7expression表达式分析函数示意图是否标识?调用scaner是否:=?调用scaner调用expression函数出错处理调用term函数是否+,-?调用scaner调用term函数出错处理否是图c.8term分析函数示意图是否标识符?是否整常数是否?调用scaner是否)?调用scaner出错处理否否是调用expression函数否是是是调用scaner图c.9factor分析过程示意图三、实验步骤(介绍关键的步骤,至少10步,并简要说明其工作原理)1.语法分析的主程序voidmain(){p=0;printf(********************语法分析程序***************\n);printf(请输入源程序:\n);调用factor函数是否*,/?调用scaner调用factor函数出错处理do{scanf(%c,&ch);prog[p++]=ch;}while(ch!='#');p=0;scaner();lrparser();printf(语法分析结束!\n);}2.编写扫描子程序voidlrparser(){if(syn==1)//begin{scaner();yucu();if(syn==6)//end{scaner();if(syn==0&&kk==0)printf(success\n);}else{if(kk!=1)printf(error,lose'end'!\n);kk=1;}}else{printf(error,lose'begin'!\n);kk=1;}return;}voidyucu(){statement();while(syn==26)//;{scaner();statement();}return;}voidstatement(){if(syn==10){scaner();if(syn==18){scaner();expression();}else{printf(error!);kk=1;}}else{printf(error!);kk=1;}return;}voidexpression(){term();while(syn==13||syn==14){scaner();term();}return;}voidterm(){factor();while(syn==15||syn==16){scaner();factor();}return;}voidfactor(){if(syn==10||syn==11)scaner();//为标识符或整常数时,读下一个单词符号elseif(syn==27){scaner();expression();if(syn==28)scaner();else{printf(')'错误\n);kk=1;}}else{printf(表达式错误\n);kk=1;}return;}3.调试程序,验证实验结果。四、实验过程原始记录(数据、图表、计算等)输入begina:=9;x:=2*3;b:=a+xend#输出success输入x:=a+b*cend#输出error五、实验结果及分析,以及心得体会通过学习了语法分析,再经过实验,让我对语法分析有了深刻的认识和了解。递归下降分析法,是一种确定的自顶向下分析技术,它的实现思想是,对文法中分别代表一种语法成分的每个非终结符号编写一个子程序,已完成非终结符号所对应的语法成分的分析任务。在分析过程中调用一系列过程或函数,对源程序进行语法语义分析直到整个程序处理结束。