版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/课程设计(论文)任务书软件学院学院软件测试专业1班一、课程设计(论文)题目first集和follow集生成算法模拟二、课程设计(论文)工作自2015年6月16日起至2013年6月19日止。三、课程设计(论文)地点:软件学院实训中心四、课程设计(论文)内容要求:1。本课程设计的目的进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟悉使用开发工具VC/JAVA/C#/。NET。2.课程设计的任务及要求1)课程设计任务:设计一个由正规文法生成First集和Follow集并进行简化的算法动态模拟。2)创新要求:动态模拟算法的基本功能是:输入一个文法G输出由文法G构造的FIRST集算法输出FIRST算法输出由文法G构造的FOLLOW集算法输出FOLLOW集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学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名:2015年6月19日课程设计(论文)评审意见(1)学习态度(20分):优()、良()、中()、一般()、差();(2)系统设计(20分):优()、良()、中()、一般()、差();(3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(20分):优()、良()、中()、一般()、差();评阅人:职称:讲师2015年6月19日ﻬ中文摘要随着计算机科学的飞速发展,形式语言与自动机理论和方法研究也越来越收到人们的重视,但前者已经成为计算机科学的理论基础。此次的课程设计主要任务是研究自动机在编译方面的应用,并将重点放在求FIRST集和FOLLOW集。根据构造FIRST集的算法和FOLLOW集的算法,编写一个程序,程序具有通用性,即编制的愈发程序能够适用于不同的文法。基本思想描述,通过对输入的文法进行判断,进而根据构造的FIRST集和FOLLOW集的算法。并把计算所得的FIRST集和FOLLOW集输出。构造FIRST集的算法和FOLLOW集的算法的核心算法教材上已经给出了,因此要做的事只是将他们实现.关键字:FIRST集,FOLLOW集,算法.ﻬ目录TOC\o”1-3"\h\z\uHYPERLINK\l"_Toc278835830"一、课程设计任务及要求ﻩPAGEREF_Toc278835830\h1HYPERLINK\l”_Toc278835831"二、需求分析ﻩPAGEREF_Toc278835831\h2HYPERLINK\l”_Toc278835832”三、设计思路ﻩPAGEREF_Toc278835832\h3HYPERLINK\l”_Toc278835833"四、详细设计 7HYPERLINK\l"_Toc278835834"五、运行调试与分析讨论 8HYPERLINK\l”_Toc278835835"六、设计体会与小结ﻩ10HYPERLINK\l"_Toc278835836”七、参考文献ﻩ11八、附录。。。..。..。。...。..。.。...。。...。...。。..。。..11一、课程设计任务及要求1.任务:设计一个由正规文法生成First集和Follow集并进行简化的算法动态模拟.First集和Follow集生成模拟算法的基本功能:输入一个文法G输入由文法G构造First集的算法输出First集输入由文法G构造Follow集的算法输出Follow集实验目的:输入:任意的上下文无关文法。输出:所输入的上下文无关文法一切非终结符的first集合和followﻩﻩ 集合。3.设文法G[S]=(VN,VT,P,S),则首字符集为:FIRST(α)={a|αaβ,a∈VT,α,β∈V*}。若αε,ε∈FIRST(α)。由定义可以看出,FIRST(α)是指符号串α能够推导出的所有符号串中处于串首的终结符号组成的集合。所以FIRST集也称为首符号集。设α=x1x2…xn,FIRST(α)可按下列方法求得:令FIRST(α)=Φ,i=1;若xi∈VT,则xi∈FIRST(α);若xi∈VN;①若εFIRST(xi),则FIRST(xi)∈FIRST(α);②若ε∈FIRST(xi),则FIRST(xi)-{ε}∈FIRST(α);i=i+1,重复(1)、(2),直到xi∈VT,(i=2,3,…,n)或xi∈VN且若εFIRST(xi)或i〉n为止。当一个文法中存在ε产生式时,例如,存在A→ε,只有知道哪些符号可以合法地出现在非终结符A之后,才能知道是否选择A→ε产生式。这些合法地出现在非终结符A之后的符号组成的集合被称为FOLLOW集合。下面我们给出文法的FOLLOW集的定义。设文法G[S]=(VN,VT,P,S),则FOLLOW(A)={a|S…Aa…,a∈VT}。若S…A,#∈FOLLOW(A).由定义可以看出,FOLLOW(A)是指在文法G[S]的所有句型中,紧跟在非终结符A后的终结符号的集合。FOLLOW集可按下列方法求得:对于文法G[S]的开始符号S,有#∈FOLLOW(S);若文法G[S]中有形如B→xAy的规则,其中x,y∈V*,则FIRST(y)-{ε}∈FOLLOW(A);若文法G[S]中有形如B→xA的规则,或形如B→xAy的规则且ε∈FIRST(y),其中x,y∈V*,则FOLLOW(B)∈FOLLOW(A);实验内容:计算FIRST集和FOLLOW集二、需求分析1.基本要求:ﻩﻩ动态模拟算法的基本功能是:输入一个文法G;输出由文法G构造FIRST集的算法;输出First集;ii)(*+F的first集T的first集E的first集111111111输出由文法G构造FOLLOW集的算法;输出FOLLOW集。ﻩ2.测试数据:输入文法G[E]:E→TE'E’→+TE’|εT→FT’T’→*FT'|εF—〉(E)|i实现提示:用数据库存储多行文法,用LIST控件显示算法,用GRID类依据算法进行作图。并实现算法与生成过程的关联。三、设计思路1.识别终结符集和非终结符集开始结束计算产生式的总数N输入要分析的文法G\ﻬ开始开始结束计算产生式的总数N输入要分析的文法G\开始开始输入n=0输入n=0识别所有符号集合Z读取一条产生式n=n+1识别所有符号集合Z读取一条产生式n=n+1终结符集合Vt=Z-Vn终结符集合Vt=Z-Vn识别产生式左部的字符V并添加到非终结符集合Vn输出Vt输出VtN>nN>nY结束结束N输出Vn输出Vn识别终结符集结束结束识别非终结符集计算所有非终结符的First集开始读取Vn中的一个非终结符V读取Vn中的一个非终结符V从语法G中查找左部是V的所有产生式从语法G中查找左部是V的所有产生式产生式的右部第一个符号V*是终结符或者V*产生式的右部第一个符号V*是终结符或者V*→ε取出其中的一条产生式取出其中的一条产生式NV*右部的第一个非终结符V可以推导YV*右部的第一个非终结符V可以推导YN将该终结符加入V的First集中将该终结符加入V的First集中还有未计算的非终结符还有未计算的非终结符结束结束计算所有非终结符的Follow集开始开始读取Vn中的一个非终结符V读取Vn中的一个非终结符V从语法G中查找左部是V的所有产生式从语法G中查找左部是V的所有产生式V的后一个字符V*为终结符V是最后一个字符V的后一个字符V*为终结符V是最后一个字符NYN添加V*到V的Follow集中添加#到V的Follow集中Y添加V*到V的Follow集中添加#到V的Follow集中是否遍历完所有右部含有V的产生式是否遍历完所有右部含有V的产生式添加V*的First集到V的Follow集中添加V*的First集到V的Follow集中有未求过的非终结符V有未求过的非终结符V完成完成Y四、详细设计开始1。操作界面的控制流图开始输入文法输入文法计算所有的非终结符Vn和终结符Vt并显示计算所有的非终结符Vn和终结符Vt并显示计算所有非终结符的First集和Follow集并显示计算所有非终结符的First集和Follow集并显示结束结束具体设计通过分析输入的文法,分析出文法肿的非终结符和终结符,然后计算出每个非终结符的FIRST集和FOLLOW集.在输出的结果上应该显示文法中的非终结符和终结符,FIRST集和FOLLOW集表格。根据表格中的每个非终结符后面的1表示的是:相对应的终结符是属于该非终结符的.五、运行调试与分析讨论1.运行程序2.输入文法3.输出非终结符和终结符4.计算First集并输出计算Follow集并输出六、设计体会与小结这次的编译原理的课程设计历时两天,进过不断的查看课本从网上差资料解决问题,让我对文法的FIRST集和FOLLOW集有了更多的了解.虽然做课程设计是一个比较辛苦的过程,但是从它的过程中我们还是可以学到很多东西的,比如思维的方式,锻炼自己的耐心,写文档时的逻辑能力。在写课设的过程中遇到了以下的问题:终结符V和V’,多了个带’的终结符,但是它在处理的时候只能当一个符号来识别,而用程序设计语言表示时它能表示成两个字符,如果处理不当的话,V'就可能被认为是终结符号V和非终结符‘。这无疑给处理过程添加了难度。还有一些自认为理所当然能实现的,却实际并不可取的方法。如:本来JAVAAPI有个方法String。split(Strings);用于以s为分割字符,将指定的字符分成字符数组。但是s为括号时(无论左右括号,大小括号,方框括号),都不能分割,并且抛异常.这是个很难理解的问题。迫不得已,我不得不想其他的方法来实现分割算法.再有就是对编译原理中FirstFollow算法设计时,采取何种策略效率最高的问题。最后我想到了用递归方式。下面总结此次课程设计的一些收获:1.对程序设计理解,算法的设计,有了进一不的提高。2.对程序调试的技巧收获不小.因为该程序主要是算法研究,所以程序分支较复杂。断点调试是必不可缺并且很实用的工作。3.对程序到软件过程的理解。这次也是我第一次将自己做的程序制作成一个可自定义安装过程的小软件。从而将程序的运行与IDE脱离开来。4.毫无疑问,就是对编译原理的理解。能够很好地理解程序设计与编译原理的关系.七、参考文献张素琴。编译原理。北京:清华大学出版社,2005付京周.JAVA程序设计语言。北京:人民邮电出版社,2007附录//求VN和VTvoidVNVT(STR*p){inti,j;for(i=0;i〈N;i++){for(j=0;j<(int)p[i]。left.length();j++){if((p[i].left[j]〉='A'&&p[i].left[j]〈='Z')){if(Vn。find(p[i].left[j])〉100)Vn+=p[i]。left[j];}else{if(Vt.find(p[i]。left[j])〉100)Vt+=p[i]。left[j];}}for(j=0;j<(int)p[i].right.length();j++){if(!(p[i].right[j]>=’A'&&p[i].right[j]〈=’Z')){if(Vt。find(p[i].right[j])>100)Vt+=p[i]。right[j];}else{if(Vn.find(p[i].right[j])〉100)Vn+=p[i]。right[j];}}}}voidgetlr(STR*p,inti){intj;for(j=0;j〈strings。length();j++)ﻩ{if(strings[j]=='—'&&strings[j+1]=='>'){p[i].left=strings.substr(0,j);p[i]。right=strings.substr(j+2,strings.length()—j);} }}//对每个文法符号求first集stringLetter_First(STR*p,charch){ﻩintt;ﻩif(!(Vt.find(ch)〉100)) { first[Vt。find(ch)]="ch”;ﻩﻩreturnfirst[Vt。find(ch)-1];ﻩ}ﻩif(!(Vn。find(ch)>100))ﻩ{ ﻩfor(inti=0;i〈N;i++) {ﻩ if(p[i]。left[0]==ch)ﻩ {ﻩ ﻩif(!(Vt。find(p[i].right[0])〉100)) ﻩ{ ﻩﻩif(First[Vn.find(ch)]。find(p[i].right[0])>100) {ﻩ ﻩ ﻩFirst[Vn.find(ch)]+=p[i]。right[0]; ﻩﻩﻩ} ﻩ } if(p[i].right[0]==’*') {ﻩ if(First[Vn.find(ch)].find('*')>100)ﻩﻩﻩ { ﻩﻩﻩFirst[Vn.find(ch)]+='*'; ﻩ }ﻩ }ﻩﻩﻩif(!(Vn.find(p[i]。right[0])〉100))ﻩﻩ {ﻩﻩﻩﻩif(p[i].right.length()==1) ﻩ ﻩ{ ﻩﻩﻩ stringff;ﻩ ﻩﻩ ff=Letter_First(p,p[i].right[0]); ﻩ ﻩ for(inti_i=0;i_i〈ff.length();i_i++) ﻩﻩ {ﻩ ﻩﻩﻩﻩif(First[Vn.find(ch)].find(ff[i_i])>100)ﻩﻩﻩ { ﻩ First[Vn.find(ch)]+=ff[i_i];ﻩﻩﻩﻩﻩﻩ}ﻩﻩﻩﻩﻩ}ﻩ }ﻩ ﻩﻩelseﻩ ﻩ{ﻩﻩﻩﻩﻩfor(intj=0;j<p[i]。right.length();j++) { ﻩﻩstringTT;ﻩ ﻩ TT=Letter_First(p,p[i]。right[j]);ﻩ ﻩﻩ ﻩif(!(TT.find('*')>100)&&(j+1)<p[i]。right.length())ﻩﻩﻩ {ﻩﻩ ﻩsort(TT.begin(),TT.end()); ﻩﻩﻩstringtt;ﻩ ﻩﻩfor(intt=1;t<TT.length();t++) {ﻩ ﻩ tt+=TT[t]; ﻩ } ﻩﻩﻩTT=tt;ﻩ ﻩ ﻩ tt=""; ﻩ ﻩ ﻩfor(t=0;t<TT。length();t++) ﻩ {ﻩ ﻩ ﻩ ﻩif(First[Vn.find(ch)].find(TT[t])〉100) ﻩﻩ ﻩﻩ{ ﻩ First[Vn.find(ch)]+=TT[t]; ﻩﻩ ﻩ ﻩ}ﻩ ﻩﻩ}ﻩﻩ } ﻩﻩ ﻩ else ﻩ { ﻩﻩﻩﻩ for(t=0;t<TT.length();t++)ﻩﻩﻩ ﻩﻩﻩ{ﻩ ﻩﻩﻩﻩﻩif(First[Vn。find(ch)]。find(TT[t])>100) ﻩ ﻩﻩ ﻩ{ﻩﻩ ﻩ First[Vn。find(ch)]+=TT[t];ﻩﻩﻩﻩﻩ ﻩﻩ}ﻩﻩ ﻩ ﻩﻩ}ﻩﻩ ﻩﻩﻩ break; ﻩﻩﻩ ﻩ} ﻩﻩ } ﻩﻩ } ﻩﻩ ﻩ }ﻩﻩ}}ﻩﻩreturnFirst[Vn.find(ch)]; }ﻩ}//求每个非终结符的Follow集stringLetter_Follow(STR*p,charch){ intt,k; NONE[Vn.find(ch)]++; if(NONE[Vn.find(ch)]==2)ﻩ{ NONE[Vn.find(ch)]=0;ﻩﻩreturnFollow[Vn.find(ch)];ﻩ} for(inti=0;i<N;i++) {ﻩ for(intj=0;j〈p[i].right。length();j++) ﻩ{ ﻩif(p[i].right[j]==ch) ﻩﻩ{ ﻩﻩﻩif(j+1==p[i].right.length())ﻩ ﻩﻩ{ ﻩ ﻩﻩstringgg; ﻩ gg=Letter_Follow(p,p[i].left[0]);ﻩﻩ ﻩﻩNONE[Vn.find(p[i].left[0])]=0; for(intk=0;k〈gg。length();k++) ﻩ ﻩﻩ{ ﻩﻩ if(Follow[Vn。find(ch)]。find(gg[k])>100) ﻩﻩ ﻩ{ ﻩ Follow[Vn.find(ch)]+=gg[k]; ﻩ ﻩ} ﻩ } ﻩ }ﻩ elseﻩﻩ ﻩ{ﻩﻩﻩ stringFF; ﻩfor(intjj=j+1;jj<p[i].right.length();jj++) ﻩﻩﻩﻩ{ ﻩﻩ ﻩstringTT;ﻩ TT=Letter_First(p,p[i]。right[jj]); ﻩ ﻩif(!(TT.find(’*’)>100)&&(jj+1)〈p[i].right.length()) ﻩ { ﻩﻩ sort(TT.begin(),TT.end()); ﻩ ﻩ stringtt; ﻩ for(intt=1;t<TT.length();t++) ﻩ ﻩ { ﻩﻩ tt+=TT[t];ﻩ ﻩ ﻩ} ﻩﻩﻩﻩTT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习主题单元11第28课时焦耳定律课件
- 冀少版八年级生物上册第五单元第一节细菌课件
- 冀少版八年级生物上册第三单元第二节光合作用的原料课件
- 初三化学第一轮复习教学教案
- 《马诗》教学设计
- 住宅小区监理廉洁自律协议
- 五年级语文下册第二单元教学设计教案
- 木材加工厂工人工作证使用办法
- 船舶制造乳胶漆粉刷施工合同
- 碳基金碳资产管理办法
- 期中测评试卷(1-4单元)(试题)-2024-2025学年人教版三年级数学上册
- GB/T 15822.1-2024无损检测磁粉检测第1部分:总则
- 新质生产力解读课件
- 中国工商银行个人贷款申请表版
- 泥塑校本课程
- 装饰施工技术标准及要求
- 2018秋七年级虎外考试卷英语试卷
- 河洛择日法[技巧]
- (完整版)室内满堂脚手架施工方案
- 英语四级单词表4500.xls
- 死亡证明样本
评论
0/150
提交评论