欢迎来到天天文库
浏览记录
ID:11238499
大小:155.00 KB
页数:5页
时间:2018-07-10
《语法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、语法分析实验报告一.实验目的1.在语法分析器原理学习和词法分析器实验基础上,自行实现一个高级语言语法分析器,通过实验能够把原理和实现方法应用到如描述语言语法分析等词法分析器的设计中去。2.利用c语言编制递归下降分析程序,并对简单语言进行语法分析。二.实验原理1.待分析的简单语言的语法:0.txt:ghy.txt2.TEST语法规则:(1)::={}(2)::=2、>3、ε(3)::=intID;(4)::=4、ε(5)::=5、6、7、8、(6)::=if()[else](7)9、)::=while()(8)::=for(;;)(9)::=write(10)::=read(11)::={}(12)::=;10、;(13)::=ID11、=12、(14)::=13、(<14、>15、<=16、>=17、==18、!=)(15)::={+19、-)}(16)::={*20、/))(17)::=()21、ID22、NUM三.实验步骤:1.用VC++编辑、编译和运行教材P221~230的语法分析程序。步骤如23、下:先编辑主程序文件TESTmain.c(P230)、词法分析程序TESTscan.c(P218-220)和语法分析程序TESTparse.c(P221-230)这三个文件;然后,新建一个工程;接下来,将上述三个文件加入到该工程中,编译后运行。2.修改词法分析程序TESTscan.c和语法分析程序TESTparse.c这二个文件,使该程序能分析do语句和逻辑表达式(包括逻辑与&&、逻辑或24、25、和逻辑非!)。语法规则如下:(1)::=dowhile();26、(2)::=ID=27、(3)::=(!28、){(&&29、30、31、)}四.实验过程:1.用记事本存好待分析的简单语法程序0.txt,编译运行程序,结果如下完整的程序结果如下:2.修改程序,实现do语句和逻辑&&,32、33、,!,运行结果如下:完整的程序结果如下:五.实验心得:通过学习了语法分析,再经过实验,我对语法分析有了更深刻的认识和了解。递归下降分析法,是一种确定的自顶向下34、分析技术,实现思想是对文法中分别代表一种语法成分的每个非终结符号编写一个子程序,完成非终结符号所对应的语法成分的分析任务。分析过程中调用一系列过程或函数,对源程序进行语法词法分析直到整个程序处理结束。六.附加程序修改原则:◇词法分析程序TESTscan.c修改如下:1、在开头把保留字的定义改为:#definekeywordSum11char*keyword[keywordSum]={"if","else","for","while","do","int","read","write","char","real",35、"return"};2、增加一行用来定义分界符&和36、:charsdword[8]="&'37、:";3、在判断双分界符&&和38、39、时增加以下代码:elseif(ch==token[0]){if(token[0]=='<'40、41、token[0]=='>'){token[1]=ch;token[2]=' ';ch=getc(fin);}elseif(strchr(sdword,ch
2、>
3、ε(3)::=intID;(4)::=
4、ε(5)::=
5、
6、
7、
8、(6)::=if()[else](7)9、)::=while()(8)::=for(;;)(9)::=write(10)::=read(11)::={}(12)::=;10、;(13)::=ID11、=12、(14)::=13、(<14、>15、<=16、>=17、==18、!=)(15)::={+19、-)}(16)::={*20、/))(17)::=()21、ID22、NUM三.实验步骤:1.用VC++编辑、编译和运行教材P221~230的语法分析程序。步骤如23、下:先编辑主程序文件TESTmain.c(P230)、词法分析程序TESTscan.c(P218-220)和语法分析程序TESTparse.c(P221-230)这三个文件;然后,新建一个工程;接下来,将上述三个文件加入到该工程中,编译后运行。2.修改词法分析程序TESTscan.c和语法分析程序TESTparse.c这二个文件,使该程序能分析do语句和逻辑表达式(包括逻辑与&&、逻辑或24、25、和逻辑非!)。语法规则如下:(1)::=dowhile();26、(2)::=ID=27、(3)::=(!28、){(&&29、30、31、)}四.实验过程:1.用记事本存好待分析的简单语法程序0.txt,编译运行程序,结果如下完整的程序结果如下:2.修改程序,实现do语句和逻辑&&,32、33、,!,运行结果如下:完整的程序结果如下:五.实验心得:通过学习了语法分析,再经过实验,我对语法分析有了更深刻的认识和了解。递归下降分析法,是一种确定的自顶向下34、分析技术,实现思想是对文法中分别代表一种语法成分的每个非终结符号编写一个子程序,完成非终结符号所对应的语法成分的分析任务。分析过程中调用一系列过程或函数,对源程序进行语法词法分析直到整个程序处理结束。六.附加程序修改原则:◇词法分析程序TESTscan.c修改如下:1、在开头把保留字的定义改为:#definekeywordSum11char*keyword[keywordSum]={"if","else","for","while","do","int","read","write","char","real",35、"return"};2、增加一行用来定义分界符&和36、:charsdword[8]="&'37、:";3、在判断双分界符&&和38、39、时增加以下代码:elseif(ch==token[0]){if(token[0]=='<'40、41、token[0]=='>'){token[1]=ch;token[2]=' ';ch=getc(fin);}elseif(strchr(sdword,ch
9、)::=while()(8)::=for(;;)(9)::=write(10)::=read(11)::={}(12)::=;
10、;(13)::=ID
11、=
12、(14)::=
13、(<
14、>
15、<=
16、>=
17、==
18、!=)(15)::={+
19、-)}(16)::={*
20、/))(17)::=()
21、ID
22、NUM三.实验步骤:1.用VC++编辑、编译和运行教材P221~230的语法分析程序。步骤如
23、下:先编辑主程序文件TESTmain.c(P230)、词法分析程序TESTscan.c(P218-220)和语法分析程序TESTparse.c(P221-230)这三个文件;然后,新建一个工程;接下来,将上述三个文件加入到该工程中,编译后运行。2.修改词法分析程序TESTscan.c和语法分析程序TESTparse.c这二个文件,使该程序能分析do语句和逻辑表达式(包括逻辑与&&、逻辑或
24、
25、和逻辑非!)。语法规则如下:(1)::=dowhile();
26、(2)::=ID=
27、(3)::=(!
28、){(&&
29、
30、
31、)}四.实验过程:1.用记事本存好待分析的简单语法程序0.txt,编译运行程序,结果如下完整的程序结果如下:2.修改程序,实现do语句和逻辑&&,
32、
33、,!,运行结果如下:完整的程序结果如下:五.实验心得:通过学习了语法分析,再经过实验,我对语法分析有了更深刻的认识和了解。递归下降分析法,是一种确定的自顶向下
34、分析技术,实现思想是对文法中分别代表一种语法成分的每个非终结符号编写一个子程序,完成非终结符号所对应的语法成分的分析任务。分析过程中调用一系列过程或函数,对源程序进行语法词法分析直到整个程序处理结束。六.附加程序修改原则:◇词法分析程序TESTscan.c修改如下:1、在开头把保留字的定义改为:#definekeywordSum11char*keyword[keywordSum]={"if","else","for","while","do","int","read","write","char","real",
35、"return"};2、增加一行用来定义分界符&和
36、:charsdword[8]="&'
37、:";3、在判断双分界符&&和
38、
39、时增加以下代码:elseif(ch==token[0]){if(token[0]=='<'
40、
41、token[0]=='>'){token[1]=ch;token[2]=' ';ch=getc(fin);}elseif(strchr(sdword,ch
此文档下载收益归作者所有