实验二:语法分析(递归下降法)

实验二:语法分析(递归下降法)

ID:14827339

大小:51.00 KB

页数:7页

时间:2018-07-30

实验二:语法分析(递归下降法)_第1页
实验二:语法分析(递归下降法)_第2页
实验二:语法分析(递归下降法)_第3页
实验二:语法分析(递归下降法)_第4页
实验二:语法分析(递归下降法)_第5页
资源描述:

《实验二:语法分析(递归下降法)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二:语法分析(递归下降法)一、实验目的1、掌握语法分析的基本原理;2、掌握递归下降的分析法;3、熟悉C语言程序设计。二、实验准备微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。三、实验时间2学时四、实验内容已给语言文法,写出该文法的递归下降法语法分析器。输入:源符号串。输出:语法是否合法。:文法:(1)<程序>::=begin<语句串>end(2)<语句串>::=<语句>{;<语句>}(3)<语句>::=<赋值语句>(4)<赋值语句>::=ID:=<表达式>(5)<表达式

2、>::=<项>{+<项>

3、-<项>}(6)<项>::=<因子>{*<因子>

4、/<因子>}(7)<因子>::=ID

5、NUM

6、(<表达式>)五:源程序:lrparser()对应<程序>yucu()对应<语句串>statement()对应<语句>expression()对应<表达式>term()对应<项>factor()对应<因子>关键字,数字,字母,符号对应码如下"begin","if","then","while","do","end"1——6字母10数字11+,-,*,/,:,:=,<,<>,<=,>,>=,=

7、,;,(,),#13——28,0factor()#include"stdio.h"#include"string.h"charprog[80],token[8];charch;intsyn,p,m,n,sum,kk=0;char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner();voidlrparser();voidyucu();voidstatement();voidexpression();voidterm();voidfactor

8、();7voidmain(){p=0;printf("Pleaseinputstring:");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!='#');//当遇到‘#’,结束输入p=0;scaner();lrparser();}voidscaner(){for(n=0;n<8;n++)token[n]=NULL;ch=prog[p++];while(ch==''

9、

10、ch=='')ch=prog[p++];m=0;if((ch>='A'&&ch<='Z')

11、

12、(ch

13、>='a'&&ch<='z')){while((ch>='A'&&ch<='Z')

14、

15、(ch>='a'&&ch<='z')

16、

17、(ch>='0'&&ch<='9')){token[m++]=ch;ch=prog[p++];//将prog数组的字母复制到ch数组中}token[m++]='';//把token的末尾设置结束符p--;//标记到当前token数组中不是字母的当前位置syn=10;//标记字母的对应码for(n=0;n<6;n++){if(strcmp(token,rwtab[n])==0)//

18、判断token对应rwtab中的哪一个,并进行对应赋对应码{syn=n+1;break;}}}elseif(ch>='0'&&ch<='9'){sum=0;while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';//number用来记录所对应的数字ch=prog[p++];7}p--;syn=11;//标记数字的对应码}else{switch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;//标记”<>”的

19、对应码token[m++]=ch;}elseif(ch=='='){syn=22;//标记”<=”的对应码token[m++]=ch;}else{syn=20;//标记”<”的对应码p--;}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;//标记”>=”的对应码token[m++]=ch;}else{syn=23;//标记”>”的对应码p--;}break;case':':token[m++]=ch;ch=prog[p++];if(ch=

20、='='){syn=18;//标记”:=”的对应码7token[m++]=ch;}else{syn=17;//标记”:”的对应码p--;}break;case'+':syn=13;//标记”+”的对应码token[m++]=ch;break;case'-':syn=14;//标记”-”的对应码token[m++]=ch;break;case'*':syn=15;//标记”*”的对应码t

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

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

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