欢迎来到天天文库
浏览记录
ID:55615632
大小:330.00 KB
页数:12页
时间:2020-05-19
《语法分析-递归下降分析法.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
此文档下载收益归作者所有