语法分析-递归下降分析法.doc

语法分析-递归下降分析法.doc

ID:55615632

大小:330.00 KB

页数:12页

时间:2020-05-19

语法分析-递归下降分析法.doc_第1页
语法分析-递归下降分析法.doc_第2页
语法分析-递归下降分析法.doc_第3页
语法分析-递归下降分析法.doc_第4页
语法分析-递归下降分析法.doc_第5页
资源描述:

《语法分析-递归下降分析法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验2-1语法分析—递归下降法一、实验目的通过本实验,掌握自上而下语法分析的要求和特点,以及递归下降分析的原理和过程。调试一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。二、实验内容利用C语言完善递归下降分析程序,并对简单语言进行语法分析。1、要点回顾标识符ID=letter(letter

2、digit)*整型常数NUM=digitdigit*单词符号及其种别码:单词符号种别码单词符号种别码begin1:17if2:=18then3<20while4<>21do5<=22end6>23letter(letter

3、digit)*10>=24

4、digitdigit*11=25-13;26+14)27*15(28/16#02、待分析的简单语言的语法用扩充的BNF表示如下:(1)<程序>::=begin<语句串>end(2)<语句串>::=<语句>{;<语句>}(3)<语句>::=<赋值语句>(4)<赋值语句>::=ID:=<表达式>(5)<表达式>::=<项>{+<项>

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

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

7、NUM

8、(<表达式>)3、实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。三

9、、完整源程序代码#include#include#includeusingnamespacestd;charprog[80];//缓冲区intp=0;//缓冲区prog的指针chartoken[8];//单词intm=0;//单词token的指针charch;//需要分析的字符intsyn=0;//单词的种别码intsum=0;//计算整数intn=0;//计数器intkk=0;char*rwtab[6]={"begin","if","then","while","do","end"};//关键字voidscan

10、er();//扫描函数voidfactor();//因子voidterm();//项voidexpression();//表达式voidstatement();//语句voidyucu();//语句串voidlrparser();//语法分析//扫描函数voidscaner(){for(n=0;n<8;n++){token[n]=0;//初始化单词}ch=prog[p++];while(ch==''){ch=prog[p++];//过滤空格。(也可用do……while)}if((ch>='A'&&ch<='Z')

11、

12、(ch>='a'&&ch<='z')){m=0;w

13、hile((ch>='A'&&ch<='Z')

14、

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

16、

17、(ch>='0'&&ch<='9')){token[m++]=ch;//将当前字符存入单词ch=prog[p++];//取下一个}token[m++]='';//结束符p--;//指针归位syn=10;//假定是变量for(n=0;n<6;n++){if(strcmp(token,rwtab[n])==0){syn=n+1;//关键字!break;}}}elseif(ch>='0'&&ch<='9'){sum=0;while(ch>='0'&&ch<='9'){sum=su

18、m*10+ch-'0';//计算数字ch=prog[p++];}p--;//指针归位syn=11;//是数字!}elseswitch(ch){case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;//是">="token[m++]=ch;//将"="存入单词}else{syn=23;//是">"p--;//指针归位}break;case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;//是"<>"token[m++]=ch;//将">"存入单词}

19、else{if(ch=='='){syn=22;//是"<="token[m++]=ch;//将"="存入单词}else{syn=20;//是"<"p--;//指针归位}}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}else{syn=17;p--;}break;case'-':syn=13;token[0]=ch;break;case'+':syn=14;token[0]=ch;break;case'*':syn=15;token[0]=ch;bre

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

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

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