编译原理 3个实验.docx

编译原理 3个实验.docx

ID:61511661

大小:259.29 KB

页数:15页

时间:2021-02-08

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

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

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

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

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