欢迎来到天天文库
浏览记录
ID:61511661
大小:259.29 KB
页数:15页
时间:2021-02-08
《编译原理 3个实验.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理实验2语法分析器的构造分类: 算法 C2013-06-2313:49 1955人阅读 评论(3) 收藏 举报【实验目的】 练习构造语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高词法分析方法的实践能力【实验要求】 利用某一高级程序设计语言构造语法分析程序 【具体要求】对于给定的文法G[E] E->TE’ E’->+TE’
2、ε T->FT’ T’->*FT’
3、ε F->(E)
4、i 采用递归下降分析法编写语法分析程序及L
5、L(1)语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。Cpp1 /*实验名称:实验2语法分析器实验学号:姓名:niu91()班级:*/#include#include#include#defineN100intseekProd(intstackTop,intinputstrTop);//charinputstr[10]="i*i+i#";charinputstr[20];charstack[10]="";typedefstructpro
6、duction{charleftChar;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';p
7、rintf("请输入字符串:");gets(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(s
8、tackTop,inputstrTop);stackPush(&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(input
9、str[inputstrTop]=='i'){return0;}elseif(inputstr[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]==
10、'T'){if(inputstr[inputstrTop]=='i'){return3;}elseif(inputstr[inputstrTop]=='('){return3;}else{return-1;}}elseif(stack[stackTop]=='Y'){if(inputstr[inputstrTop]=='+'){return5;}elseif(inputstr[inputstrTop]=='*'){return4;}elseif(inputstr[inputstrTop]==')'){return5;}else
此文档下载收益归作者所有