编译原理课程的设计

上传人:人*** 文档编号:549201435 上传时间:2022-12-14 格式:DOCX 页数:25 大小:221.94KB
返回 下载 相关 举报
编译原理课程的设计_第1页
第1页 / 共25页
编译原理课程的设计_第2页
第2页 / 共25页
编译原理课程的设计_第3页
第3页 / 共25页
编译原理课程的设计_第4页
第4页 / 共25页
编译原理课程的设计_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《编译原理课程的设计》由会员分享,可在线阅读,更多相关《编译原理课程的设计(25页珍藏版)》请在金锄头文库上搜索。

1、C语言编译器摘 要 编译原理是计算机科学与技术专业最重要的一门专业基础课程,内容庞 大,涉及面广,知识点多。由于该课程教、学难度都非常大,往往费了大量时间而达不 到预期教学效果俗语说:学习的最好方法是实践。本次课程设计的目的正是基于此,力 求为学生提供一个理论联系实际的机会,通过布置一定难度的课题,要求学生独立完成。 我们这次课程设计的主要任务是编程实现对输入合法的算符优先文法的相应的字符 串进行算符优先分析,并输出算符优先分析的过程。算符优先分析法特别有利于表 达式的处理,宜于手工实现。算符优先分析过程是自下而上的归约过程,但这种归约未 必是严格的规范归约。而在整个归约过程中,起决定作用的是

2、相继连个终结符之间的优 先关系。因此,所谓算符优先分析法就是定义算符之间的某种优先关系,并借助这种关 系寻找句型的最左素短语进行归约。通过实践,建立系统设计的整体思想,锻炼编写程 序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知 识的习惯,树立团队协作精神。同时,课程设计可以充分弥补课堂教学及普通实验中知 识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。关键词程序设计;数据库;SQL; C+;1 任务申请1.1、引言编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一 些自动构造工具。尽管“编译程序”是特指将高级程序设计语言翻译成低

3、级语言的软件, 但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实 践性要求较高的课程。目前,世界上存在着数千种源语言,既有 Fortran 和 Pascal 这样的传统程序设计 语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以 是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言 需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍 编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表 面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任 务都

4、是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言 和目标机器构建编译器。1.2、 背景编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止 一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功 能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序 翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它 把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN, PASCAL,或C那样的 高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编 译程序。1.

5、3、 目标(1)设计符号表 确定符号表的组织方式,一般应包括名字栏和信息栏,其中名字栏作为关键字。要 考虑能够存储有关名字的信息,并可以高效地完成如下操作:a. 查找:根据给定的名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其加入到符号表中,否则返回指向该名字的指针;b. 删除:从符号表中删除给定名字的表项。(2)设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要 求设计一个供词法分析调用的预处理子程序;b. 能够拼出语言中的各个单词;

6、c. 将拼出的标识符填入符号表;d. 返回(种别码, 属性值)。(3)语法分析器要求用预测分析法、递归下降分析法、算符优先分析法、SLR分析法(几种方法任 选),实现对表达式、各种说明语句、控制语句进行语法分析。( 4)目标代码生成器能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇 编指令应包括加、减、乘、除),要求指令条数最少的情况下,尽量使用寄存器,尽量 少访问内存,这样才能做到运行效率高2可行性研究报告2.1、引言编写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研 究生涯中,许多原理和技术都会反复用到。编译器的编写涉及到程序设计语言、计算机

7、体系结构、语言理论、算法和软件工程等学科。简单的说,编译器是一个程序,它读入 用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语 言)编写的程序。作为这个翻译过程匠一个重要组成部分,编译器能够向用户报告被编译的源程序中3功能需求分析3.1、引言3.1.1 词法语法分析简介 词法分析的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符 流进行扫描和分解,从而识别出一个个的单词(也称单词符号或符号)。这里所谓的单 词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程 序”,“语句”,“表达

8、式”等等,即判断单词序列是否符合组成各类语法短语的组成规则, 一般这种语法短语,也称为语法单位,可表示成语法树。3.1.2 词法需求分析简介词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一 个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也 称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具 有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保 留字是一种单词,此外还有算符,界符等等。3.2、任务概述3.2.1 目标1、了解编译器的基本结构,分析编译器的设计原理。2、加深对词法分析器的工作过程的

9、理解;加强对词法分析方法的掌握;能够采用 一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段 进行词法分析。3、加深对语法分析器工作过程的理解;加强对递归下降法实现语法分析程序的掌 握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对 简单的程序段进行语法翻译。4、加深对中间代码生成的工作过程的理解。5、加深对代码优化的工作过程的理解。6、加深对目标代码生成的工作过程的理解3.3、语法需求分析简介语法分析是编译过程的第二个阶级。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。一般这种语法短语

10、, 也称为语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序 结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。词法分析 和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线 性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字序列, 这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母 和数字组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法 成分,比如就不能用此办法去匹配表达式中的括号。语法分析的任务是语法分析器接收词法分析研究器提供的记号串,检查它们是否能 由源程序

11、的文法产生,语法分析器在编译器中的位置如图所示:典型的文法的语法分析器有三类:一类是通用的语法分析方法,如 Cocke-Younger-Kasami 算法和 Early 算法,这些方法在生成编译器时效率太低。编译器 常用的是自顶向下和自底向上的方法。采用自顶向下的递归子程序法,就是对应每个非终结符语法单元,编一个独立的处 理子程序。语法分析从读入第一个单词开始,由非终结符即开始符出发,沿语法描述图 箭头指出的方向进行分析。当遇到非终结符时,则调用相应的处理子程序,从语法描述 图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当 遇到终结符时,则判断当前读入的单词是否与图

12、中的终结符相匹配,若匹配,则执行相 应的语义程序。再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上的 多个终结符逐个相比较,若都不匹配时可能是进入下一非终结符语法单位或是出错。4关键技术实现介绍4.1、引言本次课程设计中的关键是:扫描和语法分析函数,它使用一个用于存放文法符号的先进后出栈,并利用有限关系可以确定最左素短语是否已形成来决定分析器的动作。如果当前栈顶的终结符号和带输入符号之间优先关系是 或=则表示栈顶符号串未形成最 左素短语,此时分析器将移进输入符号。如果当前栈顶的终结符号和待输入符号之间的 优先关系是,则表示已找到最左素短语的尾,在从栈顶开始,按优先关系在栈内向左 寻

13、找最左素短语的头,然后分析器将归约最左素短语。如果出现两个终结符号之间不存 在优先关系,则表示存在语法错误。以及如何编写、调试、修改代码。还要了解一个题 目有许多种解决方法。锻炼我们的思维能力。4.2、用途4.2.1 功能 员工培训管理信息系统以计算机为工具,通过对培训部门所需的信息管理,把 管理人员从繁琐的数据计算处理中解脱出来,使其有更多的精力从事公司的其他业务需 求。4.2.2 性能1 数据精确度由于采用数据库技术并且用户的应用领域对数据精确度的要求不是太高,所以这点 在系统中表现得比较少,但是用户数据的安全性与正确性是完全保证的,所以对用户的 使用没有多大的障碍。2 时间特性本系统的数

14、据库较小,所以程序在响应时间,数据更新处理时间上性能是比较突出 的。而且也正由于数据量相对较少,故在数据传输时间和系统运行时间上表现的较让人3 适应性该系统软件是使用 Visual C+ 6.0 在 windows xp 系统下完成的所以只要是兼容 windows 的软件或是操作系统,该软件都可以正确地运行,有较好的适应能力与兼容性。 而且应用户的特殊需求软件在完成后的维护阶段可以保持一个与其他类软件接口,随时 满足用户的使用要求。4.3、运行环境4.3.1 硬设备选用PC级服务器。具体配置如下:Intel 486 CPU 或以上256M 内存1 个 4.3G 硬盘, 1 个激光打印机4.3.

15、2 支持软件Microsoft access4.3.3 数据结构char ch=0; /*从字符缓冲区中读取当前字符*/int count=0; /*词法分析结果缓冲区计数器*/static char spelling10= ; /*存放识别的字*/static char line81= ; /*一行字符缓冲区( 最多 80 个字符)*/ char *pline; /*字符缓冲区指针*/static char ntab110010; /*变量名表:共 100 项,每项长度为 10*/5 系统分析5.1、基础知识5.1.1算符优先分析法的基本思想仿照算术表达式的四则运算过程算符优先分析的基本思想是只规定算符(广义为终结符)之间的优先关系,也就是只 考虑终结符之间的优先关系,不考虑非终结符之间的优先关系。在归约过程中只要找到 可归约串就归约,并不考虑归约到那个非终结符名,算符优先分析的可归约串不一定是 规范句型的句柄,所以算符优先归约不是规范归约。算符优先分析的可归约串是当前符 号栈中的符号和剩余的输入符号构成句型的最左素短语。5.1.2算符优先关系的定义设G是一个不含产生式的算符文法,a和b是任意两个终结符,A、B、C是非终 结符,算符优先关系三、/、汕定义如下: a三b当且仅当G中含有形如Af.ab或Af.aBb的产生式 a心b当且仅当G中含有形如Af.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号