欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc

    • 资源ID:4887984       资源大小:244.03KB        全文页数:41页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc

    C语言编译器的设计开发 字节代码格式设计与实现 第 37 页 共 41 页毕业设计(论文)中文摘要C语言编译器的设计开发摘要 编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级机器语言,则这种翻译程序称作编译程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代尤为重要。编译过程划分了词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、六个阶级。另外两个重要的工作:表格处理和出错处理与上述六个阶级都有联系。关键词 编译程序,源语言,目标语言,词法分析,语法分析,语义分析,字节代码,中间代码,代码优化,目标代码。毕业设计(论文)外文摘要Title The Design and Development of C Compiler Abstract The compiler procedure 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 to 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 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 language 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 with machine, and make the procedure design the expert's 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, phrasing 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, 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语法分析体流程图 174.3语法分析概要设计 184.4目标代码的分析 2145 80x86指令系统244.6字节代码设计 254.7虚拟寄存器的设计 264.8字节代码详细设计 275 使用说明书 346结论 35致谢 36参考文献371 引言(或绪论)编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实践性要求较高的课程。目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。编译器也可能没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。中间代码生成在进行了上述的语法分析和语义分析的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。2编译器的基础知识一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。2.1 编译器的发展背景编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代忧为重要。除了编译程序外,还需要一些其它的程序才能生成一个可在计算机执行的目标程序。一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任务,由一个叫做预处理程序的程序完成,有些预处理程序也负责宏展开,像C语言和预处理程序要完成文件合并、宏展开等任务。也就是说,一个编译程序的输入可能要一个或多个预处理程序来产生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理。词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,此外还有算符,界符等等。语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语。如“程序”,“语句”,“表达式”等等。一般这种语法短语也称为语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。典型的文法的语法分析器有三类:一类是通用的语法分析方法,如Cocke-Younger-Kasami算法和Early算法,这些方法在生成编译器时效率太低。编译器常用的是自顶向下和自底向上的方法。采用自顶向下的递归子程序法,就是对应每个非终结符语法单元,编一个独立的处理子程序。语法分析从读入第一个单词开始,由非终结符即开始符出发,沿语法描述图箭头指出的方向进行分析。当遇到非终结符时,则调用相应的处理子程序,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当遇到终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序。再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上的多个终结符逐个相比较,若都不匹配时可能是进入下一非终结符语法单位或是出错。自顶向下的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编,而且其顺序是由根到叶子。自顶向下的分析程序有两类:回溯分析程序和预测分析程序。预测分析程序试图利用一个或多个先行记号来预测出输入串中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要求输入中备份任意数量的字符。虽然回溯分析程序比预测强大许多,但它们都非常慢,一般都在指数的数量级上,所以对于实际的编译器并不适合。递归下降程序分析和LL(1)分析一般地都要求计算先行集合,它们分别称作First集合和Follow集合。由于无需显示地构造出这些集合就可以构造出简单的自顶向下的分析程序,所以在基本算法的介绍之后我们再讨论它们。之后我偿还要谈到一个由递归下降分析构造的分析程序。由于代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构的步骤,其中包括了某种称作中间代码的抽象代码。编译器也可能没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。这种类似目标代码的中间表示称为中间代码。2.2编译器研发的可行性分析编写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研究生涯中,许多原理和技术都会反复用到。编译器的编写涉及到程序设计语言、计算机体系结构、语言理论、算法和软件工程等学科。幸运的是,有几种基本编译器编写技术已经被用于构建许多计算机的多种语言翻译器。简单的说,编译器是一个程序,它读入用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语言)编写的程序。作为这个翻译过程匠一个重要组成部分,编译器能够向用户报告被编译的源程序中出现的错误。编译器由两部分组成:分析与综合。分析部分将源程序切分成一些基本块并形成源程序的中间表示,综合部分把源程序的中间表示转为所需的目标程序。在分析期间,源程序所蕴含的操作将被确定下来并被表示成为一个称为语法树的分层结构。语法树的每个节点表示一个操作,该节点的子节点表示这个操作的参数。许多操纵源程序的软件工具都首先完成某种类型的分析。下边是这类工具的示例:1 结构编辑器,结构编辑器将一个命令序列作为输入一构造程序。2 智能打印机,智能打印机能够对程序进行分析,打印出结构清晰的程序。3 静态检查器,静态检查器读入一个程序,分析这个程序,并在不运行这个程序的条件试图发现程序的潜在错误。4 解释器,解释器不是通过翻译来产生目标程序,而是直接执行源程序中蕴含的操作。目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。从20世纪50年代早期第一个编译器出现到今,我们所掌握的有关编译器的知识已经得到了长足的发展。整个20世纪50年代,编译器的编写一直被认为是一个极难的问题。目前我们已经系统地掌握了处理编译期间发生的许多重要任务的技术。良好的实现语言、程序设计环境和软件工具也已经被开发出来。20世纪50年代末有人开始研究编译程序的自动生成技术,提出并研制编译程序的编译程序。它的功能是以任一语言的词法规则、语法规则和语义解释出发,自动产生该语言的编译程序。目前,很多自动生成的工具已广泛使用,如词法分析的生成系统LEX,语法分析程序的生成系统YACC等。20世纪60年代起,不断有人使用自展技术来构造编译程序。自展的主要特征是用被编译的语言来书写该语言自身的编译程序。自从1971年,PASCAL的编译程序用自展技术生成后,起影响就越来越大。研究编译程序是有意义在于:1) 编译程序构造是计算机科学中的一个非常成功的分支,也是最早获的成功的分支之一;2) 它与文件转换程序关系密集,且不仅仅适用于编译程序;3) 它包含许多在实际应用中有用的算法。由于近几年并行机及多处理机的发展,对软件的并行处理技术提出了新的要求。特别是并行编译技术发展很快,目前处理并行编译技术有两种方法:第一种方法,运用重构技术把已有的串行语言编写的程序经过相关分析,分解成可并行的成分,分配到多CPU或多处理机上运行,这种技术国内已有FORTRAN和C语言的并行重构处理系统,相当成功。第二种方法,即在程序设计语言机制上允许用户自己编写并行程序,这当然比编写串行语言对编程人员提出的要求更多。即用户自己必须知道程序各模块之间逻辑结构关系及调用关系乃至运算量,以确定哪些模块可以并行执行。若编程者能按程序设计情况编出并行程序,无疑并行程序效率将比第一种方法要好。随着并行技术和并行语言的发展,处理并行语言的并行编译技术正在深入研究之中,将串行程序转换成并行程序的自动并行编译技术也正在深入研究之中。代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构的步骤,其中包括了某种称作中间代码的抽象代码。编译器也可能没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。这种类似目标代码的中间表示称为中间代码。然后编译程序再调用相应的处理程序,将中间代码转换为计算机能处理的机器指令,最终得到目标代码。23编译过程概述编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级玉器言,则这种翻译程序称作编译程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代忧为重要。除了编译程序外,还需要一些其它的程序才能生成一个可在计算机执行的目标程序。高级语言程序的处理过程如图: 需处理的源程序 预处理程序 源程序编译程序 目标汇编程序 汇编程序 可再装配的机器代码装配/连接编辑程序 可在装配的目标文件 绝对机器代码 一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任务,由一个叫做预处理程序的程序完成,有些预处理程序也负责宏展开,像C语言和预处理程序要完成文件合并、宏展开等任务。也就是说,一个编译程序的输入可能要一个或多个预处理程序来产生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理。编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序和整体工作过程是划分成阶级进行的,每个阶级将源程序的一种表示形式换成另一种表示形式,各个阶级进行的操场作在逻辑上是紧密连接在一起的,如图1所示,给出了一个编译过的和各个阶级,这是一种比较典型的划分方法。表格管理目标代码生成代码优化中间代码生成语义分析语法分析词法分析 源程序出错处理 图1图1将编译过程划分了词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、六个阶级。另外两个重要的工作:表格处理和出错处理与上述六个阶级都有联系。编译过程是源程序和各种信息被子保留在种种不同的表格里,编译各阶级的工作都涉及到构造、查找或更新有关的表格,因此需要有表格处理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,此外还有算符,界符等等。语法分析是编译过程的第二个阶级。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。一般这种语法短语,也称为语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字序列,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法成分,比如就不能用此办法去匹配表达式中的括号。语义分析阶级是审查源程序有无语义错误,为代码生成阶级收集类型信息。比如语分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用个数组下标的情况报告错误。又如某些语言规定运算对象可被强制,那么当二目运算一整数和一实型时,编译程序应将整型转换成实型而不能认为是源程序的错误。中间代码生成在进行了上述的语法分析和语义分析的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。代码优化在此阶级的任务是对前阶级产生的是间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。目标代码生成的任务是把是间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶级,它的工作与硬件系统结构和指令含义有关,这个阶的工作很复杂,涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。有时,常常把编译的过程分为前端和后端,前端由那样一些阶级组成:这些阶级的工作主要依赖于源语言而与目标机无关。通常这些阶段包括词法分析、语法分析、语义分析和中间代码生成,某些优化工作也可在前端做,也包括与前端每个阶级相关的出错处量工作和符号表管理工作。后端工作指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。若按照这种姐合方式实现编译程序,可以设想,某一编译程序的前端加上相应不同的后端则可以为不同的机器构成一个源语言的编译程序。也可以设想,不同语言编译的前端生成同一种中间语言,再使用一个共同的后端,则可为同一机器生成几个语言的编译程序。一个编译过程可由一遍、两遍或多遍完成。所谓“遍”,也称作“趟”,是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。每一遍扫视可完成上述一个阶段或多个阶段的工作。例如一遍可以只完成词法分析工作;一遍完成词法分析和语法分析工作;甚至一遍完成整个编译工作。对于多遍的编译程序,第一遍的输入是用户书写的源程序,最后一遍是输出是目标语言程序,其余是上一遍的输出为下一遍的输入。3系统需求分析3.1 LEX概述LEX是一个词法分析器(扫描器)的自动产生系统,它的示意图如下:LEX源程序 LEX yylex输入串 yylex 单词符号串 LEX源程序是用一种面向问题的语言写成的。这个语言的核心是正规表达式(正规式),用它描述输入串的词法结构。在这个语言中用户还可以描述某一个词形被识别出来时要完成的动作,例如在高级语言的词法分析器中,当识别出一个关键字时,它应该向语法分析器返回该关键字的内部编码。LEX并不是一个完整的语言,它只是某种高级语言(称为LEX的宿主语言)的扩充,因此,LEX没有为描述动作设计新的语言,而是借助其宿主语言来描述动作。LEX自动地把表示输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,它有一个固定的名字yylex,在这里yylex是一个C语言程序。32 C语言简介语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为K&R,也有人称之为K&R标准。但是,在K&R中并没有定义一个完整的标准C 语言,后来由美国国家标准协会(American National Standards Institute)在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。早期的C 语言主要是用于UNIX系统。由于语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语言之一。目前最流行的语言有以下几种: ·Microsoft C 或称 MS C ·Borland Turbo C 或称 Turbo C ·AT&T C这些语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。语言的特点:1·C语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字:autobreakCasecharconstcontinuedefaultDo double else enum extern float for goto if int long register return short signed static Sizof struct switch typedef union unsigned void volatilewhile   9种控制语句,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分。Turbo C扩充了11个关键字:asm_cs_ds_es_sscdeclfarhugeinterruptnearpascal注意:在C语言中,关键字都是小写的。2·运算符丰富。共有34种。C把括号、赋值、逗号等都作为运算符处理。从而使C的运算类型极为丰富,可以实现其他高级语言难以实现的运算。3·数据结构类型丰富。4·具有结构化的控制语句。5·语法限制不太严格,程序设计自由度大。6·C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言。7·生成目标代码质量高,程序执行效率高。8·与汇编语言相比,用C语言写的程序可移植性好。但是,C语言对程序员要求也高,程序员用C写程序会感到限制少、灵活性大,功能强,但较其他高级语言在学习上要困难一些。C语言的字符集:字符是组成语言的最基本的元素。语言字符集由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。 1.字母小写字母az共26个大写字母AZ共26个 2.数字09共10个 3.空白符空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略不计。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。4.标点和特殊字符C语言词汇: 在语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。 1.标识符 在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。 以下标识符是合法的:a, x, x3, BOOK_1, sum5 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号) 在使用标识符时还必须注意以下几点: (1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。 (2)在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。 (3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。 2.关键字 关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。语言的关键字分为以下几类: (1)类型说明符 用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的int,double等 (2)语句定义符 用于表示一个语句的功能。如例1.3中用到的if else就是条件语句的语句定义符。 (3)预处理命令字 用于表示一个预处理命令。如前面各例中用到的include。 3.运算符 语言中含有相当丰富的运算符。运算符与变量,函数一起组成

    注意事项

    本文(毕业设计论文C语言编译器的设计开发字节代码格式设计与实现.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开