欢迎来到天天文库
浏览记录
ID:36039262
大小:299.73 KB
页数:15页
时间:2019-04-29
《编译原理 3个实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验2语法分析器的构造分类: 算法 C2013-06-2313:49 1955人阅读 评论(3) 收藏 举报【实验目的】 练习构造语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高词法分析方法的实践能力【实验要求】 利用某一高级程序设计语言构造语法分析程序 【具体要求】对于给定的文法G[E] E->TE’ E’->+TE’
2、ε T->FT’ T’->*FT’
3、ε F->(E)
4、i 采用递归下降分析法编写语法分析程序及LL(1)语法分析法编
5、写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。Cpp1 /*实验名称:实验2语法分析器实验学号:姓名:niu91(859222829)班级:*/#include#include#include#defineN100intseekProd(intstackTop,intinputstrTop);//charinputstr[10]="i*i+i#";charinputstr[20];charstack[10]="";typedefstructproduction{cha
6、rleftChar;charrightChars[4];charallChars[8];}Prod;Prodproductions[8];voidinit();intstackPush(int*top,Prodprod);intmatching(int*top,char*inputstr);intmain(){intlen;//输入串的长度intstackTop=1;intinputstrTop=0;inti;char*z="#";intindex=0;init();//产生式初始化stack[0]='#';stack[stackTop]='E';printf("请输入字符串:");gets
7、(inputstr);len=strlen(inputstr);inputstr[len]='#';while(stackTop>=0){//printf("%d,%d",stackTop,inputstrTop);printf("第%2d步:",++index);printf("当前栈:%-8s",stack);printf("输入字符串:%8s",inputstr);//根据栈定元素和字符串首字母if(matching(&stackTop,inputstr)){printf("");}else{i=seekProd(stackTop,inputstrTop);stackPush(
8、&stackTop,productions[i]);//压栈printf("进行下一步所用的产生式:%s",productions[i].allChars);}}if(stackTop+1==0){printf("分析成功!");}return0;}//搜索分析表intseekProd(intstackTop,intinputstrTop){//printf("stack[stackTop]=%c",stack[stackTop]);if(stack[stackTop]=='E'){if(inputstr[inputstrTop]=='i'){return0;}elseif(in
9、putstr[inputstrTop]=='('){return0;}else{return-1;}}elseif(stack[stackTop]=='X'){if(inputstr[inputstrTop]=='+'){return1;}elseif(inputstr[inputstrTop]==')'){return2;}elseif(inputstr[inputstrTop]=='#'){return2;}else{return-1;}}elseif(stack[stackTop]=='T'){if(inputstr[inputstrTop]=='i'){return3;}elseif
10、(inputstr[inputstrTop]=='('){return3;}else{return-1;}}elseif(stack[stackTop]=='Y'){if(inputstr[inputstrTop]=='+'){return5;}elseif(inputstr[inputstrTop]=='*'){return4;}elseif(inputstr[inputstrTop]==')'){retu
此文档下载收益归作者所有