毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc
《毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc(41页珍藏版)》请在三一办公上搜索。
1、C语言编译器的设计开发 字节代码格式设计与实现 第 37 页 共 41 页毕业设计(论文)中文摘要C语言编译器的设计开发摘要 编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级机器语言,则这种翻译程序称作编译程序
2、。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代尤为重要。编译过程划分了词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、六个阶级。另外两个重要的工作:表格处理和出错处理与上述六个阶级都有联系。关键词 编译程序,源语言,目标语言,词法分析,语法分析,语义分析,字节代码,中间代码,代码优化,目标代码。毕业设计(论文)外文摘要Title The Design and Development of C Compiler Abstract The compiler proce
3、dure and translate of fundamental is a modern calculator system to constitute the one of the parts, and the system of most calculators all simply the edit and translating of language of a high class the procedure, even installed the procedure of edit and translating of a few and different function t
4、o some high class language.See from the function, and it is procedure of a language translation that edit and translate the procedure.It translate a kind of language( call the source language) procedure that write into the procedure of the another language( call the target language).For example edit
5、 collected materials the procedure is a translation procedure, it to translate edit collected materials the language procedure into the machine language the procedure.If high class language, target language that language is like of FORTRAN, PASCAL, or the C is so to as edit collected materials the l
6、anguage or machine language so of low class jade article speech, then this kind of translation the procedure call to edit and translate the procedure.An importance that edit and translate procedure now it make most calculatorses the customer need not consider the heavy details that have relation wit
7、h machine, and make the procedure design the experts independence with procedure in the machine, the quantity that this is for the machine that nowadays age keep on with category to constantly increase to importance.Edit and translated the process to divide the line the phrase method the analysis, p
8、hrasing the analysis, language the righteousness the analysis, in the center the code is born, code , target the code is born, six rank.Another two importance of work:The form handles with come amiss to handle to have connection with above six rankses all.Keywords compiler procedure, source language
9、, target language,code generation,middle code, synax analyers,lexical analyzers,intermediate code,byte code 目 次 1 引言(或绪论)12 编译器的基础知识22.1编译器的发展背景 32.2编译器研发的可行性分析32.3编译过程概述 53系统需求分析 83.1 LEX概述 832 C语言简介933软件工程方法论的应用1034词法语法分析简介 133.5词法需求分析简介 133.6语法需求分析简介 1437符号表的应用154系统设计 1641系统设计总体流程图164.2语法分析体流程图 1
10、74.3语法分析概要设计 184.4目标代码的分析 2145 80x86指令系统244.6字节代码设计 254.7虚拟寄存器的设计 264.8字节代码详细设计 275 使用说明书 346结论 35致谢 36参考文献371 引言(或绪论)编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实践性要求较高的课程。目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专
11、用语言。目标语言也同样广泛,目标语言可以是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。编译器也可能没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编
12、译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。中间代码生成在进行了上述的语法分析和语义分析的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种
13、多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。2编译器的基础知识一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。2.1 编译器的发展背景编译程序是现代计算机系统的基本组成部分之一,
14、而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代忧为重要。除了编
15、译程序外,还需要一些其它的程序才能生成一个可在计算机执行的目标程序。一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任务,由一个叫做预处理程序的程序完成,有些预处理程序也负责宏展开,像C语言和预处理程序要完成文件合并、宏展开等任务。也就是说,一个编译程序的输入可能要一个或多个预处理程序来产生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理。词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符
16、,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,此外还有算符,界符等等。语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语。如“程序”,“语句”,“表达式”等等。一般这种语法短语也称为语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。典型的文法的语法分析器有三类:一类是通用的语法分析方法,如Cocke-Younger-Kasami算法和Early算法,这些方法在生成编译器时效率太低。编译器常用的是自顶向下和自
17、底向上的方法。采用自顶向下的递归子程序法,就是对应每个非终结符语法单元,编一个独立的处理子程序。语法分析从读入第一个单词开始,由非终结符即开始符出发,沿语法描述图箭头指出的方向进行分析。当遇到非终结符时,则调用相应的处理子程序,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当遇到终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序。再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上的多个终结符逐个相比较,若都不匹配时可能是进入下一非终结符语法单位或是出错。自顶向下的分析算法通过在最左推导中描述出各个步骤来分析记号串
18、输入。之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编,而且其顺序是由根到叶子。自顶向下的分析程序有两类:回溯分析程序和预测分析程序。预测分析程序试图利用一个或多个先行记号来预测出输入串中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要求输入中备份任意数量的字符。虽然回溯分析程序比预测强大许多,但它们都非常慢,一般都在指数的数量级上,所以对于实际的编译器并不适合。递归下降程序分析和LL(1)分析一般地都要求计算先行集合,它们分别称作First集合和Follow集合。由于无需显示地构造出这些集合就可以构造出简单的自顶向下的分析程序,所以在基本算法的介绍之后
19、我们再讨论它们。之后我偿还要谈到一个由递归下降分析构造的分析程序。由于代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构的步骤,其中包括了某种称作中间代码的抽象代码。编译器也可能没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者
20、可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。这种类似目标代码的中间表示称为中间代码。2.2编译器研发的可行性分析编写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研究生涯中,许多原理和技术都会反复用到。编译器的编写涉及到程序设计语言、计算机体系结构、语言理论、算法和软件工程等学科。幸运的是,有几种基本编译器编写技术已经被用于构建许多计算机的多种语言翻译器。简单的说,编译器是一个程序,它读入用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语言)编写的程序。作为这个翻译过
21、程匠一个重要组成部分,编译器能够向用户报告被编译的源程序中出现的错误。编译器由两部分组成:分析与综合。分析部分将源程序切分成一些基本块并形成源程序的中间表示,综合部分把源程序的中间表示转为所需的目标程序。在分析期间,源程序所蕴含的操作将被确定下来并被表示成为一个称为语法树的分层结构。语法树的每个节点表示一个操作,该节点的子节点表示这个操作的参数。许多操纵源程序的软件工具都首先完成某种类型的分析。下边是这类工具的示例:1 结构编辑器,结构编辑器将一个命令序列作为输入一构造程序。2 智能打印机,智能打印机能够对程序进行分析,打印出结构清晰的程序。3 静态检查器,静态检查器读入一个程序,分析这个程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 语言 编译器 设计 开发 字节 代码 格式 实现

链接地址:https://www.31ppt.com/p-4887984.html