




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
燕山大学里仁学院计算机课程设计编译原理课程设计一、设计要求可根据自己实际情况,选择以下一项作为分析算法的输入:(1)直接输入根据己知文法构造的LR(0)分析表。(2)输入已知文法的项目集规范族和转换函数,由程序自动生成LR(0)分析表。(3)输入已知文法,由程序自动生成LR(0)分析表。二、设计目的设计、编制和调试一个具体的LR(0)语法分析程序,加深对语法分析的理解。三、算法描述直接输入根据已知文法构造的LR(0)分析表。文法如下: (0)S-E(1)E-aA(2)E-bB(3)A-c(4)B-cB(5)B-d#include #include #include #define stack_size 20#define stackincrement 10int p=0,q=0,zh,sh,x;char Vn3=E,A,B; /非终结符char Vt6=a,b,c,d,#; /终结符typedef struct char *bottom; char *top; int size;/char datastack_size;stack;int Initstack(stack &s) /初始化栈 s.bottom=(char *)malloc(stack_size*sizeof(char); if(!s.bottom) exit(-1); s.top=s.bottom; s.size=stack_size; return(1);int push(stack &s,char e) /入栈/int i; if(s.top-s.bottom=s.size) s.bottom=(char *)realloc(s.bottom,(stack_size+stackincrement)*sizeof(char); if(!s.bottom) exit(-1); s.top=s.bottom+s.size; s.size+=stackincrement; *s.top+=e; coute进s栈; / s.datax=e; / /x+;/输出所有元素/ for(i=0;ix;i+)cout=s.size) s.bottom=(char *)realloc(s.bottom,(stack_size+stackincrement)*sizeof(char); if(!s.bottom) exit(-1); s.top=s.bottom+s.size; s.size+=stackincrement; *s.top+=e; coute进t栈; return(1);int pop(stack &s,char *e) /出栈 if(s.top=s.bottom) return(0); *e=*-s.top; cout*e出s栈 ; return(1);int pop2(stack &s,int *e) /出栈 if(s.top=s.bottom) return(0); *e=*-s.top; cout*e出t栈 ; return(1);int action(int m,int n,char a) /ACTION表 int i; int act105=2,3,0,0,0,0,0,0,0,20, 0,0,5,0,0,0,0,7,8,0,11,11,11,11,11, 13,13,13,13,13,12,12,12,12,12,0,0,7,0,0, 15,15,15,15,15,14,14,14,14,14 ; for(i=0; in; i+) if(a=Vti) break; if(i=n&a!=Vtn-1)return(0); else zh=actmi; /if(zh=0)cout出错endl; /else return(zh); return(zh); int go(int m,int n,char a) /goto表int i;int go103=1,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0 ; for(i=0; in; i+) if(a=Vni) break; if(i=n&a!=Vnn-1)return(0); else sh=gomi; /if(sh=0)cout出错; /else return(sh); return(sh); void main() char ch,y; int x,v,e,u,ok=1; int i=0,index=0,k; char st20; stack s; stack t; cout 输入要分析的字符串(end by ;):st0; while(sti!=;) i+; cinsti; Initstack(s); Initstack(t); push(s,#); push2(t,0); coutt; while(ok=1) ch=stindex; index+; coutendlch分析; if(ch=;) ok=0;break; y=ch; couty=yt; /y是终结符 pop2(t,&q); /这两句主要是为了得到当前的q值 push2(t,q); coutq=qt; /q是09的数字 u=action(q,6,y); coutu=u0&action(q,6,y)10&action(q,6,y)20) switch(zh) case 11: for(i=0;i5;i+)pop(s,&y);pop2(t,&x); push(s,S); pop2(t,&e); push2(t,e); go(e,3,S); /查询GOTO表 push2(t,sh); /替换后的数字 index-; break; case 12: pop(s,&y);pop2(t,&x); push(s,A); pop2(t,&e); push2(t,e); go(e,3,A); push2(t,sh); index-; break; case 13: pop(s,&y); pop(s,&y); pop2(t,&x); pop2(t,&x); push(s,A); pop2(t,&e); push2(t,e); go(e,3,A); push2(t,sh); index-; break; case 14: pop(s,&y);pop2(t,&x); push(s,B); pop2(t,&e); push2(t,e); go(e,3,B); push2(t,sh); index-; break; if(action(q,6,y)=20)cout分析成功endl;ok=0;else if(u=0)cout出错endl;break; 四、程序结构 先设计直接输入LR(0)分析表,即ACTION和GOTO表。最后主程序中输入要分析的字符串,利用直接输入的分析表对字符串进行分析。五、心得和体会通过这次课程设计,使我对编译原理这门课程有了更深一步的了解,尤其是基于LR(0)方法的语法分析这部分知识。知
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025招商证券股份有限公司雄安分公司招聘38人备考考试试题及答案解析
- 2025年甘肃省庆阳市宁县城区初中和县直小学选调缺员教师补充备考考试题库附答案解析
- 2025年甘肃省陇南市徽县虞关乡招聘专职化村文书备考模拟试题及答案解析
- 2025上海市养志康复医院(上海市阳光康复中心)招聘19人备考考试试题及答案解析
- 2025浙江宁波宁海县招聘社区专职工作者补充备考模拟试题及答案解析
- 2025济南市历城区凤鸣学校补充顶岗教师(3人)备考考试题库附答案解析
- 中考电学实验重点难点解读及试题分析
- 地基基础工程施工质量保证措施
- 小学二年级古诗词教学设计
- 高级技工培训课程体系构建实务
- 建筑工程岗位招聘笔试题与参考答案(某大型国企)2025年
- 第21章 二次根式 单元测试卷(含答案)-2025-2026学年数学华东师大版九年级上册
- 2025-2030中国废旧汽车拆解材料分类利用与循环经济园区建设报告
- 2025-2026学年教科版(2024)小学科学二年级上册(全册)每课教学反思
- 2025-2026学年人教鄂教版(2024)小学科学三年级上册(全册)教学设计(附目录P137)
- 2025版金融业务合同委托管理协议
- 部队手榴弹使用课件
- 社区网格员考试试题(含答案)
- 2025年宜都市总工会公开招聘乡镇工会协理员3人考试参考题库附答案解析
- 2025版欧派橱柜环保材料购货合同
- 教研组长经验交流会上教学副校长讲话:抓关键见实效干出值当的组长工作
评论
0/150
提交评论