当前位置:首页>> >>


编译原理课设.rar

收藏

资源目录
    文档预览:
    编号:20180825164900207    类型:共享资源    大小:19.84MB    格式:RAR    上传时间:2018-08-25
      
    60
    金币
    关 键 词:
    编译 原理
    资源描述:
    课程设计( 论文)任务书软 件 学 院 学 院 软件工程(大数据) 专 业 2015-杰普一班 班 一、课程设计(论文)题目 编译原理课程设计 二、课程设计(论文)工作自 2018 年 5 月 13 日起至 2018 年 5 月 20 日止。三、课程设计(论文) 地点: 软 件 学 院 实 训 二 部 四、课程设计(论文)内容要求:1.本课程设计的目的进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识, 熟悉使用开发工具 C++ /JAVA/C#/python 。2.课程设计的任务及要求1)课程设计任务:编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)① 使用自动机技术实现一个词法分析程序;② 使用算符优先分析方法实现其语法分析程序;③ 在语法分析过程中同时完成常量表达式的计算。2)创新要求:用数据库存储多行文法,用 LIST 控件显示算法,用 GRID 类依据算法进行作图。并实现算法与生成过程的关联。给定文法和对应的 FIRSTVT 和 LASTVT 集,能依。据依据文法和 FIRSTVT 和 LASTVT 生成算符优先分析表。用结构体数组存储多行正规式,用 LIST 控件显示算法,用 CDC 类依据进行算法进行作图。并实现算法与生成过程的关联。给定算符优先分析表,输入一个句子,能由依据算符优先分析表输出与句子对应的语法树。能对语法树生成过程进行模拟。给定 LR 分析表,输入一个句子,能由依据 LR 分析表输出与句子对应的语法树。能对语法树生成过程进行模拟,动态模拟算法的基本功能。3)课程设计论文编写要求(1)课程设计任务及要求XXX:编译原理课程设计-第 2 页 -(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 学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名: 2018 年 5 月 20 日课程设计(论文)评审意见(1)学习态度(20 分):优( )、良( )、中( )、一般( )、差( ); (2)系统设计(20 分):优( )、良( )、中( )、一般( )、差( ); (3)编程调试(20 分):优( )、良( )、中( )、一般( )、差( );(4)回答问题(20 分):优( )、良( )、中( )、一般( )、差( );XXX:编译原理课程设计-第 3 页 -(5)论文撰写(20 分):优( )、良( )、中( )、一般( )、差( ); 评阅人: 职称: 2018 年 5 月 25 日XXX:编译原理课程设计-第 4 页 -中文摘要随着计算机科学的飞速发展,形式语言与自动机理论和方法的研究也越来越受到人们的重视,但前者已经成为计算机科学的理论基础。本课程设计主要研究自动机在编译方面的应用,并将讨论重点放在算符优先分析法上,并用此理论完成算数表达式的正确与否的判断。根据算符优先分析算法,编写一个语法程序,程序具有通用性,即编制的语法缝隙程序能够适用于不同文法以及各种输入的单词串。基本思想描述,语法分析前首先要对输入的文法和句子进行词法分析,去除多余的自负,并将产生式和终结符、非终结符填入有关数组,为语法分析做前期准备。算符优先分析算法的核心算法教材上已给出,因此所要做的事只是将其变成实现。本课程设计的题目为“FirstVT 集和 LastVT 集生成算法模拟”,它是算符优先分析算法中判断三种优先关系的关键。算符优先分析算法是自底向上分析方法的一种。所谓自底向上分析,也称移近——规约分析,粗略地说它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出的栈中,边移进边分析,一旦栈顶符号串形成某个句型的句柄或可规约串,就用该产生式的左部非终结符代替相应右部的文法符号串,这称为一部规约。重复这一过程直到规约到栈中只剩文法的开始符号则为分析成功,也就确认输入串是该文法的句子。而算符优先分析算法的基本思想只是规定算符之间的优先关系,也就是只考虑终结符之间的优先关系。本课程设计的要求只是构造 FirstVT 集和 LastVT 集,在此基础上扩充建造算符优先关系表。XXX:编译原理课程设计-第 5 页 -目 录一、课程设计任务及要求 ...................................................................5二、需求分析 .......................................................................................6三、设计思路 .......................................................................................7四、详细设计 .......................................................................................8五、运行调试与分析讨论 .................................................................24六、设计体会与小结 .........................................................................30XXX:编译原理课程设计-第 6 页 -1、课程设计任务及要求识别出源语言中各类单词,且以二元组形式输出。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)1 使用自动机技术实现一个词法分析程序;2 使用算符优先分析方法实现其语法分析程序;3 在语法分析过程中同时完成常量表达式的计算。设计一个由正规文法生成 First 集和 Follow 集并进行简化的算法动态模拟。动态模拟算法的基本功能是:(1) 输入一个文法 G;(2) 输出由文法 G 构造 FIRST 集的算法;(3) 输出 First 集;(4) 输出由文法 G 构造 FOLLOW 集的算法;(5) 输出 FOLLOW 集。设计一个由正规文法生成 FirstVT 集和 LastVT 集的算法动态模拟。动态模拟算法的基本功能是:(1) 输入一个文法 G;(2) 输出由文法 G 构造 FIRSTVT 集的算法;(3) 输出 FirstVT 集; (4) 输出由文法 G 构造 LastVT 集的算法;输出 LastVT 集。XXX:编译原理课程设计第 7 页 二、需求分析词法分析程序又称词法分析器或词法扫描器。可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词,这里,作为子程序词法分析器的结构:状态转换图的程序实现 为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:1) ch 存放最新读进的源程序字符2) strToken 存放构成单词符号的字符串3) Buffer 字符缓冲区 4) struct keyType 存放保留字的符号和种别XXX:编译原理课程设计-第 8 页 -三、设计思路算符优先分析表的构造原理:通过检查文法 G 的每个产生式的每个候选式,可以首先找出满足 a=b 的终结符对;为了找出所有满足关系<和>的终结符对,我们首先需要对文法 G 的每个非终结符 P 构造二个集合FIRSTVT(P)和 LASTVT(P)。1. FirstVT 集的构造FIRSTVT(P)={a|P=>+a...或 P=>+Qa...,a∈VT 而 Q∈VN }若有产生式:P→a...或 P→Qa...,则 a∈FIRSTVT(P);若 a∈FIRSTVT(Q),且有产生式 P→Q...,则 a∈FIRSTVT(P)。2. LastVT 集的构造LASTVT(P)={ a|P=>+...a 或 P=>+...aQ,a∈VT 而 Q∈VN }若有产生式:U→...a 或 U→...aV, 则 a∈LASTVT(U);若 a∈LASTVT(V),且有产生式 U→...V,则 a∈LASTVT(U)。当我们有了这二个集合之后,就可以通过检查每个产生式的候选式确定满足关系的“<”和“>”的所有终结符对。我们假定有产生式的一个侯选式形为...aP...,那么,对任何b∈FIRSTVT(P),a<b;假定有产生式的一个候选形为...Pb...,那么,对任何a∈LASTVT(P),有 a>b。3. 构造算符优先关系表在我们有了每个非终结符 P 的 FIRSTVT(P)和 LASTVT(P)集合之后,就能够构造文法 G 的优先表。XXX:编译原理课程设计第 9 页 四、详细设计首先介绍算符优先文法的几个重要性质:性质 1:在算符文法中任何句型都不包含两个相邻的非终结符。性质 2:如果 Aa(或者 bA)出现在算符文法的句型 S 中,其中 A 是非终结符,b 是终结符,则 S 中任何含此 b 的短语必含有 A。1.FirstVT 集的构造,算法描述①:若有产生式 A->a…或 A->Ba…,则 a 属于 FirstVT(A ),其中A、B 为非终结符,a 为终结符。②:若 a 属于 FirstVT(B)且有产生式 A->B…则有 a 属于FirstVT(A )。为了计算方便,建立一个布尔数组 F[m,n](m 为非终结字符的个数,n 为终结字符的个数)和一个后进先出栈 STACK。将所有的非终结符排序,用 iA 表示非终结符 A 的序号,再将所有的终结符排序,用 ia 表示终结符 a 的序号。算法的目的是要使数组的一个元素最终取值满足:F[iA,ja]的值为真,当且仅当 a 属于 FirstVT(A)。至此,显然所有的非终结符的 FirstVT 集已完全确定。步骤如下:首先按规则①对每个数组元素附初值。观察这些初值,若 F[iA,ia]的值是真,则将(A,a )推入栈中,直至对所有数组的初值都按此处理完。然后对栈做如下运算。将栈顶项弹出,则令其变为真,且将(A,a)推进栈,如此重复直到栈弹空为止。若表达式文法为:(0) E'→# E #(1) E→E + T(2) E→T(3) T→T*F(4) T→F(5) F→P↑F | P(6) P→(E)(7) P→i计算每个非终结符的 FirstVT 集和 LastVT 集得到如下结果:FIRSTVT(E') = { # }FIRSTVT(E) = {+,*,↑,(,i}FIRSTVT(T) = {*,↑,(,i}XXX:编译原理课程设计-第 10 页 -FIRSTVT(F) = {↑,(,i}FIRSTVT(P)={(,i}2.LastVT 集的构造,算法描述:用于构建输入文法的 LastVT 集①若有规则 U::=…a 或 U::==…aV,则 a 属于 LastVT(U)②若有规则 U::=…V,且 a 属于 LastVT(V)则 a 属于 LastVT(U )设一个栈 STACK,和一个布尔数组 BProcedureInsert(U,a )IF NOT B[U,a] THENBEGINB[U,a]::=TRUE;把(U,a)推进 STACK 栈;END;BEGINFOR 每个非终结符号 U 和终结符号 a DOB[U,a]:=FALSE;FOR 每个形如 U::=…a 或 U::=…aV 的规则 DOINSERT(U,a);WHILE STACK 栈非空 DOBEGIN把 STACK 栈的栈顶弹出,记为(V,a);FOR 没条形如 U::=…V 的规则 DOINSERT(U,a);END OF WHILE;END;具体算法如下:BeginFor 每个终结符 P 和终结符 a Do F[P,a]=FALSE;For 每个形如 P->…a 或 P->…aQ 的产生式,Do insert (P,a)While Stack 非空 DoBegin把 Stack 的顶端,记为(Q,a),上托出去;For 每条形如 P->…Q 的产生式Insert(P,a)End of while;
    展开阅读全文
    1
      金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:编译原理课设.rar
    链接地址:http://www.gold-doc.com/p-97668.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
    copyright@ 2014-2018 金牌文库网站版权所有
    经营许可证编号:浙ICP备15046084号-3
    收起
    展开