编译原理语法分析

编译原理语法分析

ID:20478306

大小:471.64 KB

页数:20页

时间:2018-10-13

编译原理语法分析_第1页
编译原理语法分析_第2页
编译原理语法分析_第3页
编译原理语法分析_第4页
编译原理语法分析_第5页
资源描述:

《编译原理语法分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、语法分析一、实验目的编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检査和结构分析。二、实验要求利川C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1待分析的简单语言的语法用扩充的BNF表示如下:(1)<程序〉::=begin<d§句串〉end(2)<语句串〉::=<语句:>{;<语句〉)(3)<语句〉=<赋值语句〉赋值语句〉::=ID:=<表达式〉(5)<表达式〉=<项〉{+<项〉卜<项〉}(6)<项〉=<因子〉{*<因子〉

2、/<因子〉(7)<因子〉::=ID丨NUM

3、(<表达式〉)2.2实验要求说明输入单

4、词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“ermr”。例如:输入begina:=9;x:=2*3;b:=a+xend#输出success!输入x:=a+b*cend#输出error2.3语法分析程序的酸法思想(1)主程序示意图如图2-1所示。置初值调用scaner读下一个单词符号调用lrparser结朿图2-1语法分析主程序示意图(1)递归下降分析程序示意图如图2-2所示。(2)语句串分析过程示意图如图2-3所示。打印分析成功山错处理图2-2递归下降分析程序示意图(4)statement

5、语句分析程序流程如图2-4、2-5、2-6、2-7所示。调用expression函数图2-4statement语句分析函数示意图图2-5expression表达式分析函数示意图出错处理调用scaner调用scaner图2-7factor分析过程示意图三、语法分析程序的C语言程序源代码:^include〈iostream〉#includeusingnamespacestd;charprog[80],token[8],ch;char*rwtab[6]={”begin","if’,"then","while",ndo","

6、end"};intsyn,p,m,n,sum;intkk;voidfactor();voidexpression();voidyucu();voidterm();voidstatement();voidlrparser();intscaner();//语法剖析方法voidlrparser(){if(syn==l){scaner();//读下一个单词符号yucu();//调用yucuO函数;if(syn==6){scaner();if((syn==O)&&(kk==O))printf("$ucces$!");}else{if(kk!=

7、l)printf(Mthestringhaven’tgota'end’!")kk=l;}}else{printf("haven'tgota’begin’!’’);kk=l;}//voidyucu()//调用函数statement^;//读下一个单词符号//调用函数statement();{statement();while(syn==26){scaner();if(syn!=6)statement();}}//判断是否为字母或数字voidstatement(){if(syn==10){scaner();if(syn==l8){s

8、caner();expression();//读下一个单词符号//读下一个单词符号//调用函数statement();else{printf("thesing•:=’iswrong!°kk=l;}}else{printf("wrongsentence!n);kk=l;}}//voidexpression(){term();while(($yn==l3)

9、

10、(syn==14)){scaner();term();}//读下一个单词符号//调川函数term();//voidterm(){factor();while((syn==l5)

11、

12、

13、(syn==16)){scaner();factor();}//读下一个单词符号//调用函数factor();voidfactor(){if((syn==10)

14、

15、(syn==ll))scaner();elseif(syn==27){scaner();//读下一个单词符号expression();//调用涵数statement();if($yn==28)scaner();//读下一个单词符号else{printf("theerroron’C");kk=l;else{printf(’’theexpressionerror!”k

16、k=l;}}//判断方法intscaner(){for(n=();n<8;n++)token[n]=NULL;ch=prog[p++];//判断是否为空或结朿符while((ch==',)

17、

18、(ch=='

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

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

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