C语言编译器设计与实现毕业论文(设计)
基于C语言的编译器设计研究

基于C语言的编译器设计研究引言编译器是计算机科学中一项重要的技术,它能够将高级程序语言转化为机器语言,使计算机能够理解和执行程序。
在编译器的设计与实现中,C语言一直扮演着重要的角色。
C语言是一种被广泛使用的高级程序语言,其设计简洁、可移植性强,因此在操作系统、嵌入式系统等领域得到了广泛应用。
本文将探讨基于C语言的编译器设计研究,包括编译器的基本原理、编译器设计的步骤、编译器优化的技术等方面。
编译器的基本原理编译器是将高级程序语言转化为机器语言的工具。
其基本原理如下:1.词法分析:编译器首先对源代码进行词法分析,将代码分解成独立的单词,例如关键字、标识符、常量、运算符等。
2.语法分析:根据语法规则对分析出的单词进行组织和分析,形成语法树。
语法树表示了源代码的结构和语法关系。
3.语义分析:编译器对语法树进行语义分析,验证代码的合法性,并生成中间代码。
4.中间代码生成:中间代码是一种抽象的低级程序语言,类似于汇编语言,但比机器语言更接近高级程序语言。
中间代码包含了程序的结构和操作。
5.代码优化:编译器对生成的中间代码进行优化,以提高程序的执行效率和资源利用率。
代码优化可以包括常量折叠、公共子表达式消除、循环展开等技术。
6.代码生成:编译器将优化后的中间代码转化为目标机器代码,这是计算机可以直接执行的代码。
编译器设计的步骤设计一个基于C语言的编译器需要经历以下步骤:1.需求分析:确定编译器的功能和性能要求,了解用户需求和应用场景。
2.语法设计:设计C语言的语法规则和语义规则,以及相应的错误处理机制。
3.词法分析器设计:设计识别并分解源代码的词法分析器,采用正则表达式和有限自动机等方式实现。
4.语法分析器设计:设计将词法分析器输出的单词流转化为语法树的语法分析器,采用上下文无关文法和语法分析算法实现。
5.语义分析器设计:设计将语法树进行类型检查、符号表管理等操作的语义分析器,确保代码的合法性。
6.中间代码生成器设计:设计将语法树转化为中间代码的生成器,采用三地址码、四元式等表示方式。
C语言编译器设计与实现毕业论文(设计)

毕业设计(论文)任务书第1页第2页第3页毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
C语言编译器的设计与实现

C语言编译器的设计与实现
徐媛媛
【期刊名称】《黑龙江科技信息》
【年(卷),期】2015(000)010
【摘要】C语言是一门高级计算机编程语言,其设计的目标是为用户提供一种简易的语言编译方式,并且可以在任何环境下运行的编程语言。
C语言编译器是一种先进的转换程序,在设计的过程中,专业性比较强。
计算机系统一般都设有着多种语言编译程序,在与语言进行编译的过程中,可以将源程序转换为机器语言,实现目标程序的简易转化。
本文对C语言编译器的设计方案进行了研究,希望对相关设计人员有所帮助,可以增加C语言编译器的功能。
【总页数】1页(P154-154)
【作者】徐媛媛
【作者单位】郑州轻工业学院民族职业学院,河南郑州450000
【正文语种】中文
【相关文献】
1.TI DSP C语言编译器正确性测试 [J], 孙海燕;陈跃跃;王峰;杨灿群;阳柳;王霁
2.peC语言的部分求值器及在编译器测试中的应用 [J], 郭德贵;王冠成;吕帅;刘磊
3.国标BASIC语言增量编译器的设计与实现 [J], 张亚明;邓良松
4.C语言微型编译器的实现 [J], 李艳杰;高新阳
5.C语言微型编译器的实现 [J], 李艳杰; 高新阳
因版权原因,仅展示原文概要,查看原文内容请购买。
C语言实现的编译器设计

C语言实现的编译器设计编译器是将高级语言(如C语言)代码转换为机器语言或者其他形式的可执行代码的软件工具。
它是软件开发过程中不可或缺的一部分。
在本文中,将介绍C语言实现的编译器设计,并探讨其中的技术原理和实现步骤。
一、引言编译器是一种非常复杂的软件工具,它可以将高级语言代码转换为机器语言。
C语言作为一种广泛应用于软件开发的编程语言,其编译器的设计和实现至关重要。
本文将从编译器设计的角度来介绍C语言编译器的基本原理和实现方法。
二、编译器的基本原理编译器的设计基于以下三个基本原理:词法分析、语法分析和语义分析。
词法分析器负责将源代码转换为单词流或者记号流,语法分析器负责将单词流或者记号流转换为语法树,而语义分析器则负责对语法树进行语义分析。
1. 词法分析词法分析器负责读取源代码的字符流,将其转换为单词流或者记号流。
在C语言中,单词可以是关键字、标识符、常数或者运算符等等。
词法分析器通过正则表达式和有限自动机来识别每个单词,并生成相应的记号。
2. 语法分析语法分析器负责对单词流或者记号流进行分析,并将其转换为语法树。
语法树是由语法规则定义的一种树状结构,用于表示程序的语法结构。
在C语言中,语法规则包括函数定义、语句块、条件语句等等。
语法分析器使用上下文无关文法和递归下降分析等技术来构建语法树。
3. 语义分析语义分析器负责对语法树进行语义分析。
它检查语法树中的每个节点,并对其进行类型推导、类型检查等操作。
语义分析器还负责生成中间代码或者目标代码,并进行一些优化操作。
三、C语言编译器的实现步骤C语言编译器的实现可以分为以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。
1. 词法分析词法分析的目标是将源代码转换为单词流或者记号流。
为了实现词法分析,需要定义C语言的词法规则,并使用正则表达式和有限自动机技术进行单词识别。
词法分析器还负责跳过注释和处理预处理指令等操作。
2. 语法分析语法分析的目标是将单词流或者记号流转换为语法树。
编译原理c语言编译器的设计与实现

经编译程序运行后得到的输出结果如下:
1〕词法分析得出的相应的名字的号码和他的值2〕列举程序中所有的变量
3〕状态栈的移进-归约过程1.
4〕最后产生的四元式中间代码
一、实验总结:
通过此次实验,让我知道了词法分析的功能是输出把它组织成单个程序,让我理解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;对语法规那么有明确的定义;编写的分析程序可以进展正确的语法分析;对于遇到的语法错误,可以做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。
通过该实验的操作,我理解编译原理课程兼有很强的理论性和理论性,是计算机专业的一门非常重要的专业根底课程,它在系统软件中占有非常重要的地位,是计算机专业学生的一门主修课。
为了让学生可以更好地掌握编译原理的根本理论和编译程序构造的根本方法和技巧,融会贯穿本课程所学专业理论知识,进步他们的软件设计才能,。
毕业设计(论文)-基于LLVM的编译器的设计与实现

毕业设计(论文)-基于LLVM的编译器的设计与实现题目:基于LLVM的编译器的设计与实现设计人:指导教师:所属系部:计算机科学与技术学院专业班级:计算机082001班2012年 6月 4日太原科技大学毕业设计(论文)任务书学院: 计算机科学与技术学院学生姓名学号 200820010114 专业班级计算机082001 同组人无任务下发时间 2012年3月任务完成时间 2012年6月设计(论文)题目基于LLVM的编译器的设计与实现设计高质量应用软件的开发,需要高效的编程语言和编译器的支持。
目的为了加深学生对编程语言和编译器的理解,要求学生设计一个类似C要求的小源语言,然后利用LLVM实现该语言的编译器。
在深刻理解编译原理,掌握文法设计和编译器构造方法,并且熟悉LLVM的基础上,完成编程语言和编译器的设计。
主要内容包括: 设计 (1)设计源语言,要求包括变量声明,基本赋值语句,数组访问,主要条件分支语句,循环语句,函数定义,和函数调用等。
内容 (2)学习LLVM,完成词法分析,语法分析,和语法制导翻译(翻译成LLVM IR)工作,最后利用LLVM实现代码优化和代码生成功能。
设计毕业论文提交外文资料翻译资料编译器软件学生签名指导教师签名系主任签名主管院长签名太原科技大学学士学位论文中文摘要开发高性能的应用软件,除了一个良好的软件架构外,还需要高效的编程语言和高质量的编译器的支持。
现有语言的改动和新语言的创造,都会带来编译器的开发需求。
本文设计了一门新的编程语言leechee,定义了此种语言的文法结构、词法规则,并在linux环境下实现了leechee编程语言的编译器。
具体实现方式为首先利用Flex完成词法分析,而后使用Bison完成文法设计、语法分析和语法制导翻译,把源代码翻译成LLVM IR,最后利用LLVM实现代码优化和代码生成功能。
关键字:编程语言;编译器;语法制导翻译;LLVM IR;代码优化太原科技大学学士学位论文The Design and Implementation ofLLVM based CompilerAuthor: Liang Guanlin Tutor: Liu AiqinABSTRACTIn addition to a good software-architecture, the development of high-performance applications also needs the support of an efficient programming language and a high-quality compiler. Changes to existing languages and creation of new languages, will bring the developmentneeds of the compilers. This paper designs a new programming language leechee, defines its grammaticalstructures, lexical rules, and implements its compiler under Linux environment. The specific approach is, first, finishes the scanner with Flex, and then completes the grammar design, parser, syntax directed translation with Bison, implements the translation to LLVM IR, andfinally use the LLVM to do the code optimization and code generation.Keywords: programming language; compiler; syntax directed translation; LLVM IR; code optimizationI太原科技大学学士学位论文目录第一章绪论 ....................................................................0 1.1 什么是编译器 ........................................................... 0 1.2 总会有编译器的开发需求 . 01.3 为什么做这个项目 ....................................................... 1 第二章设计什么样的编译器和语言 (3)2.1 做一个什么样的编译器 (3)2.1.1 利用LLVM实现一门新语言 (3)2.1.2 利用flex和bison完成词法分析和语法分析 (4)2.2 设计一个什么样的语言 (5)2.2.1 计算机可以做什么 (5)2.2.2 本设计的语言——leechee ......................................... 6 第三章相关技术的介绍 .......................................................... 7 3.1Flex ...................................................................73.1.1 Flex输入文件的格式 .............................................. 7 3.2Bison ..................................................................83.2.1 Bison的语法文件 (8)3.2.2 文法规则的语法 (9)3.2.3 文法设计需要注意的问题 ......................................... 10 3.3LLVM ..................................................................113.3.1 LLVMIR (11)3.3.2 LLVM对三段式设计的实现 (12)3.3.3 利用LLVM完成代码优化 .......................................... 14 第四章语言和编译器的设计 ..................................................... 16 4.1 语言设计 .. (16)4.1.1 leechee的数据组成 (16)4.1.2 leechee的文法规则 (17)II太原科技大学学士学位论文4.1.3 leechee的词法规则 (24)4.1.4 leechee的输入输出 (26)4.2 抽象语法树 (27)4.2.1 抽象语法树的用处 (27)4.2.2 leechee语法树的设计 (28)4.3 语法制导翻译 (30)4.3.1 利用Bison实现语法制导翻译方案 (31)4.3.2 均分代码生成工作 ............................................... 31 第五章编译器的实现 .. (32)5.1 抽象语法树的实现 (32)5.1.1NodeAST (32)5.1.2 类型 (33)5.1.3 表达式 (35)5.1.4 语句 (41)5.1.5 声明 (45)5.2 符号表 (49)5.3 分析栈 (50)5.4 中间代码生成的上下文 (51)5.5 输入输出 (52)5.6 代码优化 .............................................................. 54 第六章用例说明 (55)6.1 用例程序 (55)6.2 使用步骤 .............................................................. 57 结束语 ..................................................................... ... 58 致谢 ..................................................................... ..... 59 参考文献 ......................................................................60 附录 ..................................................................... .. (61)附录? 英文资料翻译 (61)III太原科技大学学士学位论文附录? 程序代码 (73)IV太原科技大学学士学位论文第一章绪论1.1 什么是编译器编译器(compiler)也是一个计算机程序,它把用某种编程语言(源语言)编写的代码转变成另一种计算机语言(目标语言,通常是二进制形式的目标代码)。
C语言编译器设计与实现毕业论文

C语言编译器设计与实现毕业论文目录摘要 ............................................................. 错误!未定义书签。
Abstract............................................................ 错误!未定义书签。
第一章绪论 (1)1.1 开发背景 (1)1.2 开发目标和意义 (2)1.2 当前编译器国外的发展情况 (3)第二章理论基础 (6)2.1 编译系统概述 (6)2.1.1 什么是编译器 (6)2.1.2 编译器的产生 (6)2.2 编译器的结构 (7)2.3 编译器的组织 (10)2.3.1 编译的分遍 (10)2.3.2 分遍的设计 (11)2.4 编译器中的主要数据结构 (11)2.5 编译程序的开发 (12)2.5.1 历史与发展 (12)2.5.2 开发注意事项 (12)2.5.3 编译技术和软件工具 (12)第三章 C编译器可行性分析及总体设计 (15)3.1 可行性分析 (15)3.1.1 经济可行性 (15)3.1.2 技术可行性 (15)3.1.3 运行可行性 (16)3.1.4 时间可行性 (16)3.1.5 法律可行性 (16)3.2 C语言的基本描述 (17)3.3 C编译器的功能 (18)3.4 C编译器的程序结构 (18)3.4.1 C编译器的设计模式 (18)3.4.2 C编译器的文件组成 (20)3.5 C编译器中的主要数据结构 (20)第四章 C编译器的实现 (24)4.1 词法分析阶段 (24)4.1.1 概述 (24)4.1.2 C词法分析程序的实现 (25)4.1.3 关键字与标识符的识别 (27)4.1.4 词法识别具体实现 (27)4.2 语法分析阶段 (31)4.2.1 概述 (31)4.2.2 C语言抽象出来的文法规则 (32)4.2.3 C语法分析程序的实现 (38)4.3 语义分析阶段 (47)4.3.1 概述 (47)4.3.2 C语言的语义 (48)4.3.3 C的符号表 (48)4.3.4 C语义分析程序的实现 (49)4.4 中间代码生成阶段 (55)4.4.1 概述 (55)4.5 C编译器的使用方法及测试 (56)4.5.1 使用方法 (56)4.5.2 测试源文件 (56)4.5.3 测试词法分析 (57)4.5.4 测试语义分析及中间代码生成 (58)4.5.5 测试分析表文件的构造 (59)参考文献 (62)致谢 (63)第一章绪论1.1 开发背景随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。
用c语言做毕业设计

用c语言做毕业设计【篇一:c语言编译器实现毕业设计】编译原理课程设计题目 c语言编译器实现计算机科学学院计算机科学与技术专业10 级计本班学号:姓名:指导教师:完成时间: 2013 年 6 月目录c语言编译器实现一、原理1、简介编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。
每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。
由编译程序的五个阶段就对应了编译系统的结构。
2、单词符号及种别表示3、语法结构定义如下:程序 ::= main()语句块语句块::= ‘{‘语句串’}’ 语句串::=语句{;语句};语句::=赋值语句|条件语句|循环语句赋值语句::=id=表达式条件语句::=if条件语句块循环语句::=do 语句块while 条件条件::=表达式关系运算符表达式表达式 ::= 项{ +项|-项} 项 ::= 因子{*因子|/因子}因子 ::=id|num|(表达式) 关系运算符 ::= |=||=|==|!二、运行环境windows 系统 visual c++ 6.0三、算法设计思想1、词法分析主要算法这部分对源文件进行分析,允许/* */注释。
从源文件依次读取字符,对字符进行分析,组成字符串、数字、关系符等固定含义的token 符,并把它们添加到token链中,如果遇到非法字符报错并退出程序。
2、语法分析主要算法这部分对token链进行分析,利用自底向上的分析方法,构建slr (1)分析表的过程是手工完成的。
语法分析的同时构建语法树,移进时创建叶子,规约时创建节点。
3、语义分析主要算法这部分对语法树从左到右进行遍历,节点记录了规约式的编号,遍历到节点时就进行相应处理。
语义分析主要检查变量、函数是否被定义或重定义,同时产生四元式。
函数一览表void scanner();【篇二:c语言编译器设计与实现毕业论文设计】北京邮电大学毕业设计(论文)任务书第1页第2页第3页c语言编译器设计与实现摘要随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业设计(论文)任务书第1页第2页第3页毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订教研室(或答辩小组)及教学系意见C语言编译器设计与实现摘要随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言。
而编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。
其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的程序。
从高级语言,甚至运行与虚拟平台的高级语言,到机器语言,最终到硬件执行的物理信号,这一层层的转化,都涉及编译技术的应用。
本系统采用C++为编程语言。
论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键词:编译技术,编程程序,高级语言C language compiler design and ImplementationAbstractWith the wide application of the computer, computer programming languages are developed from the early machine language into assembly language , and now a variety of high-level programming language. The compiler technology is the backbone of computer language development, but also the fastest growing in computer science , a branch of the most mature , he epitomizes the essence of the computer and the fruits of development .The core idea is the same logical structure of the program and ideas expressed in the conversion from one language to another language program represented . From the high-level language , and even running with high-level language virtual platform to machine language , and ultimately to the hardware implementation of the physical signal , the layers of transformation involves application of compiler technology .System uses C++ as the programming language. Paper introduces the development background of the topic, the development and function to complete the process. Note the focus of systems design, design ideas, technologies and solutions difficult.Key Words:Compiler technology,Programming procedures,High-level programming language目录摘要 (ii)Abstract (iii)第一章绪论 (1)1.1 开发背景 (1)1.2 开发目标和意义 (1)1.2 当前编译器国内外的发展情况 (2)第二章理论基础 (4)2.1 编译系统概述 (4)2.1.1 什么是编译器 (4)2.1.2 编译器的产生 (4)2.2 编译器的结构 (4)2.3 编译器的组织 (6)2.3.1 编译的分遍 (6)2.3.2 分遍的设计 (6)2.4 编译器中的主要数据结构 (7)2.5 编译程序的开发 (7)2.5.1 历史与发展 (7)2.5.2 开发注意事项 (7)2.5.3 编译技术和软件工具 (7)第三章C编译器可行性分析及总体设计 (9)3.1 可行性分析 (9)3.1.1 经济可行性 (9)3.1.2 技术可行性 (9)3.1.3 运行可行性 (9)3.1.4 时间可行性 (10)3.1.5 法律可行性 (10)3.2 C语言的基本描述 (10)3.3 C编译器的功能 (10)3.4 C编译器的程序结构 (11)3.4.1 C编译器的设计模式 (11)3.4.2 C编译器的文件组成 (12)3.5 C编译器中的主要数据结构 (12)第四章C编译器的实现 (14)4.1 词法分析阶段 (14)4.1.1 概述 (14)4.1.2 C词法分析程序的实现 (14)4.1.3 关键字与标识符的识别 (16)4.1.4 词法识别具体实现 (16)4.2 语法分析阶段 (18)4.2.1 概述 (18)4.2.2 C语言抽象出来的文法规则 (19)4.2.3 C语法分析程序的实现 (22)4.3 语义分析阶段 (26)4.3.1 概述 (26)4.3.2 C语言的语义 (27)4.3.3 C的符号表 (27)4.3.4 C语义分析程序的实现 (28)4.4 中间代码生成阶段 (33)4.4.1 概述 (33)4.5 C编译器的使用方法及测试 (33)4.5.1 使用方法 (33)4.5.2 测试源文件 (33)4.5.3 测试词法分析 (34)4.5.4 测试语义分析及中间代码生成 (35)4.5.5 测试分析表文件的构造 (36)参考文献 (38)致谢 (39)第一章绪论1.1 开发背景随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。
相应地,也产生了许多用以编写这些计算机程序的高级程序设计语言。
程序编制者通过特定语言的编译器将自己编写的源程序翻译为特定机器上的目标程序,从而能够最终达到程序执行的目的。
从20世纪60年代以来,编译器设计就一直是计算机研究发展和开发领域中的一个活跃主题。
虽然编译器设计已有很长的历史,并且也是一门相对成熟的计算机技术,但编译器毕竟是一种实现由高级语言源程序至机器或汇编指令的高效映射工具,随着计算机软、硬件水平的飞速发展,使得计算机应用日新月异,程序语言的设计在不断地变化,目标机体系结构也在不断地改进,软件越来越复杂,其规模也越来越大。
尽管编译器设计问题在高级层次上没有变化(或变化很小),但当我们深入其内部研究时就会发现,编译器的内部构造其实也一直在变化。
此外,由于我们能够提供给编译器本身使用的计算资源也在不断增加。
因此,现代编译器可以采用比以前更耗费时间和空间的算法。
当然,编译技术研究人员也在继续努力开发新的、更好的技术来解决传统编译器的一些设计性问题[1]。
另一方面,很多编译“前端”技术,如文法、正则表达式、语法分析器以及语法制导翻译器等,仍然被广泛使用。
1.2 开发目标和意义编译器是一种相当复杂的系统程序,其代码的长度可从几千行到几百万行不等,所以编写甚至读懂这样的一个程序都不是一件容易的事。
绝大多数的计算机专业人员从来没有编写过一个完整的编译器,但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。
除此之外,计算机应用程序中经常遇到的一个任务就是有关命令解释程序和界面程序的开发,这比编译器的开发规模要小,但使用的却是很类似的技术。