




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件学院学院软件测试专业2班一、课程设计(论文)题目FirstVT集和LastVT集生成算法模拟二、课程设计(论文)工作自2023年6月20日起至2023年6月24日止。三、课程设计(论文)地点:软件学院实训中心四、课程设计(论文)内容要求:1.本课程设计的目的进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟悉使用开发工具VC/JAVA/C#/.NET。2.课程设计的任务及要求1)课程设计任务:设计一个由正规文法生成FIRSTVT集和LASTVT集的算法动态模拟。(算法参见教材)动态模拟算法的基本功能是:输入一个文法G;(2)输出由文法G构造FIRSTVT集的算法;(3)输出FIRSTVT集;(4)输出由文法G构造LASTVT集的算法;(5)输出LASTVT集。2)创新要求:3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路--工作原理、功能规划(3)详细设计数据分析、算法思路、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)报告按规定排版打印,要求装订平整,否则要求返工;(7)课设报告的装订顺序如下:封面任务书中文摘要目录正文附录(代码及相关图片)(8)严禁抄袭,如有发现,按不及格处理。4)课程设计评分标准:(1)学习态度:20分;(2)系统设计:20分;(3)编程调试:20分;(4)回答问题:20分;(5)论文撰写:20分。5)参考文献:(1)张素琴,吕映芝.编译原理[M].,清华大学出版社(2)蒋立源、康慕宁等,编译原理(第2版)[M],西安:西北工业大学出版社6)课程设计进度安排1.准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2.程序模块设计分析阶段(4学时):程序总体设计、详细设计3.代码编写调试阶段(8学时):程序模块代码编写、调试、测试4.撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名:2023年6月24日(1)学习态度(20分):优()、良()、中()、一般()、差();(2)系统设计(20分):优()、良()、中()、一般()、差();(3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(20分):优()、良()、中()、一般()、差();评阅人:职称:副教授2023年6月日中文摘要编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。随之而来的还有形式语言与自动机理论和方法的研究也越来越受到人们的重视,本课程设计主要研究自动机在编译方面的应用,并将讨论重点放在算符优先分析法上,并用此理论完成算数表达式的正确与否的判断。算符优先分析法是一种自底向上分析方法,也称移进-归约分析法,粗略地说它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,(该句柄对应某产生式的右部),就用该产生式的左部非终结符代替目录一、课程设计任务及要求1二、需求分析2三、设计思路3四、详细设计5五、运行调试与分析讨论11六、设计体会与小结13七、参考文献14一、课程设计任务及要求总体要求1.思想的正确性,采用合适的数据存储结构等。2.程序实现的正确性,程序整体结构合理、编程风格规范等。3.程序功能的完善程度,包括功能的基本实现、基本完善、完全实现4.工作认真、独立完成课设。基本要求动态模拟算法的基本功能是:1.输入一个文法G;2.输出由文法G构造FIRSTVT集的算法;3.输出FirstVT集;4.输出由文法G构造LastVT集的算法;5.输出LastVT集。二、需求分析本课程设计的题目为“FirstVT集和LastVT集生成算法模拟”,它是算符优先分析算法中判断三种优先关系的关键。算法优先分析法是一种不太规范的自下向上分析方法,分析速度快,特别适用于表达式的分析。而所谓的自底向上分析法是一种语言形式分析算法.是根据形式文法的重写规则,自叶开始逐级向上归约,直到构造出表示句子结构的整个推导树为Firstvt集:找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:A->a,即以终结符开头,该终结符入FirstvtA->B,即以非终结符开头,该非终结符的Firstvt入A的FirstvtA->Ba,即先以非终结符开头,紧跟终结符,则终结符入为了计算方便,建立一个布尔数组F[m,n](m为非终结字符的个数,n为终结字符的个数)和一个后进先出栈STACK。将所有的非终结符排序,用iA表示非终结符A的序号,再将所有的终结符排序,用ia表示终结符a的序号。算法的目的是要使数组的一个元素最终取值满足:F[iA,ja]的值为真,当且仅当a属于FirstVT(A)。至此,显然所有的非终结符的FirstVT集已完全确定。步骤如下:首先按规则①对每个数组元素附初值。观察这些初值,若F[iA,ia]的值是真,则将(A,a)推入栈中,直至对所有数组的初值都按此处理完。然后对栈做如下运算。将栈顶项弹出,则令其变为真,且将(A,a)推进栈,如此重复直到栈弹空为止。Lastvt集:找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:A->a,即以终结符结尾,该终结符入LastvtA->B,即以非终结符结尾,该非终结符的Lastvt入A入Firstvt数据结构:布尔数组F[P,a]:F[P,a]为真当且仅当a?LASTVT(P)。开始时,按上述规则(1)对每个数组元素F[P,a]赋初值。栈STACK:把所有初值为真的数组元素F[P,a]的符号对(P,a)全都放入STACK中。计算过程:如果栈STACK不空,就将顶项逐出,记此项为(Q,a)。对于每个形如P→Q…的产生式,若F[P,a]为假,则改变其值为真且将(P,a)推进STACK栈。上述过程必须一直重复,直至栈STACK拆空为止。四、详细设计voidmain()//主函数{inti,j,k=0;printf("请输入文法规则数:");scanf("%d",&r);printf("请输入文法规则:\n");for(i=0;i<r;i++){scanf("%s",st[i]);//存储文法规则,初始化FIRSTVT集和LASTVT集*/first[i][0]=0;/*first[i][0]和last[i][0]分别表示st[i][0]非终极符的FIRSTVT集和LASTVT集中元素的个数*/last[i][0]=0;}for(i=0;i<r;i++)//判断文法是否合法{for(j=0;st[i][j]!='\0';j++){if(st[i][0]<'A'||st[i][0]>'Z'){printf("不是算符文法!\n");exit(-1);}if(st[i][j]>='A'&&st[i][j]<='Z'){if(st[i][j+1]>='A'&&st[i][j+1]<='Z'){printf("不是算符文法!\n");exit(-1);}}}}for(i=0;i<r;i++){for(j=0;st[i][j]!='\0';j++){if((st[i][j]<'A'||st[i][j]>'Z')&&st[i][j]!='-'&&st[i][j]!='>'&&st[i][j]!='|')lable[k++]=st[i][j];}}lable[k]='#';lable[k+1]='\0';table();printf("每个非终结符的FIRSTVT集为:\n");//输出每个非终结符的FIRSTVT集for(i=0;i<r;i++){printf("%c:",st[i][0]);for(j=0;j<first[i][0];j++){printf("%c",first[i][j+1]);}{printf("%c",last[i][j+1]);}printf("\n");}printf("算符优先分析表如下:\n");for(i=0;lable[i]!='\0';i++)printf("\t%c",lable[i]);printf("\n");for(i=0;i<k+1;i++){printf("%c\t",lable[i]);for(j=0;j<k+1;j++){printf("%c\t",data[i][j]);}printf("\n");}printf("请输入文法输入符号串以#结束:");scanf("%s",input);deal();}voidfirstvt(charc)//求FIRSTVT集的函数{inti,j,k,m,n;for(i=0;i<r;i++){if(st[i][0]==c)break;}first[i][n]=st[i][m+1];n++;}else{if(zhongjie(st[i][m+2])){first[i][n]=st[i][m+2];n++;}if(st[i][m+1]!=c){firstvt(st[i][m+1]);for(j=0;j<r;j++){if(st[j][0]==st[i][m+1])break;}for(k=0;k<first[j][0];k++){intt;for(t=0;t<n;t++){if(first[i][t]==first[j][k+1])break;}if(t==n){first[i][n]=first[j][k+1];n++;}}}}}m++;}while(st[i][m]!='\0');first[i][n]='\0';first[i][0]=--n;fflag[i]=1;}}voidlastvt(charc)//求LASTVT集{inti,j,k,m,n;for(i=0;i<r;i++){if(st[i][0]==c)break;}if(lflag[i]==0){n=last[i][0]+1;m=0;do{if(st[i][m+1]=='\0'||st[i][m+1]=='|'){if(zhongjie(st[i][m])){last[i][n]=st[i][m];n++;}else{if(st[i][m]!=c){lastvt(st[i][m]);for(j=0;j<r;j++){if(st[j][0]==st[i][m])break;}for(k=0;k<last[j][0];k++){intt;for(t=0;t<n;t++){if(last[i][t]==last[j][k+1])break;}if(t==n){last[i][n]=last[j][k+1];n++;}}}}}m++;}while(st[i][m]!='\0');last[i][n]='\0';last[i][0]=--n;lflag[i]=1;}}实验数据:E->E+TT->T*F|FF->(E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上海中期期货股份有限公司社会招聘(2人)模拟试卷及答案详解(考点梳理)
- 2025广东省企事业单位10000+岗位春季招聘4月23日西安站模拟试卷及答案详解(有一套)
- 2025江苏苏州市相城生态文旅发展(集团)有限公司人员招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025第二季度新疆机场集团哈密伊州机场招聘23人考前自测高频考点模拟试题及一套答案详解
- 2025年大兴安岭塔河县公安局公开招聘警务辅助人员80人模拟试卷附答案详解(完整版)
- 2025内蒙古政府单位招聘1人模拟试卷及一套答案详解
- 2025年滁州学院公开招聘工作人员(硕士研究生)13人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年北京师范大学淮南实验学校教师招聘9人模拟试卷及答案详解(各地真题)
- 2025年《中国烟草》杂志社有限公司(中国烟草总公司传媒中心)招聘模拟试卷及答案详解(新)
- 2025河南新乡市延津县县外在编在岗教师回乡任教的模拟试卷及完整答案详解一套
- 生态学群落演替课件
- 2022年上海市经济信息中心(上海市公共信用信息服务中心)招聘笔试备考题库及答案解析
- TCTCA 13-2023 凉感织物席规程
- 心血管急救药物用法总结
- GB/T 17194-1997电气导管电气安装用导管的外径和导管与配件的螺纹
- GB/T 12224-2005钢制阀门一般要求
- GA/T 1481.2-2018北斗/全球卫星导航系统公安应用第2部分:终端定位技术要求
- TB T2075-《电气化铁道接触网零部件》
- 运动系统慢性损伤
- 员工培训记录表(模板)
- 气质类型问卷
评论
0/150
提交评论