文档详情

语法分析递归文法.doc

发布:2017-06-16约3.97千字共7页下载文档
文本预览下载声明
实验二:自顶向下的语法分析:递归下降法 1、实验目的:编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。 2、实验要求: 文法(教材199页) (1)把词法分析作为语法分析的子程序实现(5分) (2)独立的语法分析程序(4分) (3)输入串以‘#’结束,输出成功(success)或出错(error)、指出出错位置(行、列以及错误类型) #include stdio.h #include string.h char prog[80], token[8]; char ch; int syn, p, m, n, sum, kk=0; char *rwtab[6]={begin, if, then, while, do, end}; void scaner(); void lrparser(); void yucu(); void statement(); void expression(); void term(); void factor(); void main() { label: p=0; printf(Please input string:\n); do { scanf(%c, ch); prog[p++]=ch; }while(ch!=#); //当遇到#,结束输入 p=0; scaner(); lrparser(); } void scaner() { for(n=0; n8; n++) token[n]=NULL; ch=prog[p++]; while(ch== ||ch==\n) ch=prog[p++]; m=0; if((ch=Ach=Z) || (ch=ach=z)) { while((ch=Ach=Z) || (ch=ach=z)||(ch=0ch=9)) { token[m++]=ch; ch=prog[p++];//将prog数组的字母复制到ch数组中 } token[m++]=\0; //把token的末尾设置结束符\0 p--;//标记到当前token数组中不是字母的当前位置 syn=10; //标记字母的对应码 for(n=0; n6; n++) { if(strcmp(token, rwtab[n])==0) //判断token对应rwtab中的哪一个,并进行对应赋对应码 { syn=n+1; break; } } } else if(ch=0ch=9) { sum=0; while(ch=0ch=9) { sum=sum*10+ch-0; //number用来记录所对应的数字 ch=prog[p++]; } p--; syn=11; //标记数字的对应码 } else { switch(ch) { case : m=0; token[m++]=ch; ch=prog[p++]; if(ch==) { syn=21; //标记的对应码 token[m++]=ch; } else if(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===) { syn=18; //标记:=的对应码 token[m++]=ch; } else { syn=17; //标记:的对应码 p--; } break; case +: syn=13; //标记+的对应码 token[m++]=ch; break; case -: syn=14; //标记-的对应码 token[m++]=ch; break; case *: syn=15; //标记*的对应码 token[m++]=ch; break; case /:
显示全部
相似文档