编译原理实验(二)

编译原理实验(二)

ID:20432887

大小:260.68 KB

页数:12页

时间:2018-10-12

编译原理实验(二)_第1页
编译原理实验(二)_第2页
编译原理实验(二)_第3页
编译原理实验(二)_第4页
编译原理实验(二)_第5页
资源描述:

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

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

2、-<项〉}(6)<项〉::=<因子〉{*<因子〉

3、/<因子〉⑺〈因子〉::=ID

4、NUM

5、(〈表达式〉)2实验要求说明输入单词串,以

6、“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。例如:输入begina:=9;x:=2*3;b:=a+xend#输山success!输入x:=a+b*cend#输山error二、实验环境MicrosoftVisualStudioVC6.0三、算法描述(1)主程序示意图如图2-1所示。[晋初俏调用scaner读下一个单词符号调用lrparser图2-1语法分析主程序示意图(1)递归下降分析程序示意图如图2-2所示。(2)语句串分析过程示意图如图2-3所示。打印分析成功出错处理图2-2递归下降分析程序示意

7、图(3)statement语句

8、分析程序流程如图2-4、2-5、2-6、2-7所示。调用expression函数调MJscaner调用term闲数山错处理图2-4statement语句分析困奴不思囡、出错处理图2-5expression表达式刀n幽似小思图调用scaner图2-6term分析函数示意图调川expression函数Vj是V岀错处理调用scaner调用scaner图2-7factor分析过程示意图四、源程序清单#include"stdio.h"^include"string,h”charprog[100],tokcn[8],ch;char

9、*rwtab[6]={z/bcgin,z,"if",’’then”,"while”,’’do’’,’’end’’};intsyn,p,m,n,sum;intkk;factor();//因子expression();//表达式judgueO;//判断语句、下一条语句tcrmO;//项statement();//赋值语句lrparser();//判断、输出函数scancr();//读下一个字符yucu();voidmain(){P=0;printf("本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本本;printf("请输入源程序:

10、");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!=’#’);P=0;scancr();lrparser();printf("语法分析结束!");•Ilrparscr(){if(syn==l)//begin{scancr0;yucuO;if(syn==6)//end{scancr();if(syn==O&&kk==O)printf(’’success〃);}else{if(kk!=l)printf("error,lose’end’!");kk=l;}}elseprintf(’’error,lose’

11、begin’!〃)kk=l;return0;}yucu(){statement();while(syn==26)//;{scancr();statement();}return0;}statement(){if(syn==10){scancr();if(syn==18){scancr();expression();elseprintfC’error!〃);kk=l;}}else{printfC’error!〃);kk=l;}return0;expression()term();while(syn==13

12、

13、syn==14)scancr();tcr

14、m();return0;tcrm()factor();while(syn==15syn==16)scancr();factor();return0;factor()if(syn==10

15、

16、syn==ll)scanerO;//为标识符或整常数时,读下一个单词符号elseif(syn==27){scancr();expression();if(syn==28)scancr();else{printf(〃’)’错误");kk=l;}}elseprintf(〃表达式错误11〃);kk=l;return0;scancr(){sum=0;for(m=0;m

17、<8;m++)token[m]=NULL;//数组清空m=0;ch=prog[p++];while(ch==

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

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

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