编译原理 3个实验

编译原理 3个实验

ID:36039262

大小:299.73 KB

页数:15页

时间:2019-04-29

编译原理 3个实验_第1页
编译原理 3个实验_第2页
编译原理 3个实验_第3页
编译原理 3个实验_第4页
编译原理 3个实验_第5页
资源描述:

《编译原理 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

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

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

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