c语言编译器设计与实现Word格式.docx
《c语言编译器设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《c语言编译器设计与实现Word格式.docx(49页珍藏版)》请在冰豆网上搜索。
4.深入分析编译器编写语言(C++);
5.设计并实现编译过程中各个子过程,词法分析,语法分析,语义分析;
6.训练检索文献资料和利用文献资料的能力;
7.训练撰写技术文档与学位论文的能力。
第2页
毕业设计(论文)主要内容:
学生应交出的设计文件(论文):
1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;
2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。
第3页
主要参考文献(资料):
[1]KennethA.Reek.C和指针.人民邮电出版社,2008
[2]BrianW.Kernighan,DennisM.Richie.TheCProgramLanguage.,2004
[3]RichardStevens.UNIX环境高级编程.人民邮电出版社,2006
[4]布莱恩特,奥哈拉伦.深入理解计算机系统.机械工业出版社,2011
[5]StanleyB.Lippman等.C++Primer.人民邮电出版社,2008
[6]AlfredV.Aho等.编译原理技术和工具.机械工业出版社,2003
[7]AndrewW.Appel等.现代编译原理-C语义描述.人民邮电出版社.2006
[8]StevenS.Muchnick.高级编译器设计与实现.机械工业出版社.2005
[9]严蔚敏,吴伟民.数据结构.2012
[10]高一凡.面向对象的C++数据结构.清华大学出版社.2011
[11]ThomasH.Cormen,IntroductiontoAlgorithmsm.2012
[12]Portland.Lex&
yaccTutorial.2013
[13]ChrisFrase,DavidHansonARetargetable.CCompiler:
DesignandImplementation.
2005
专业班级
软件1008班
学生
郝靖宇
要求设计(论文)工作起止日期
2014年3月17日~2014年6月27日
指导教师签字
日期
2014年3月17日
教研室主任审查签字
系主任批准签字
摘 要
随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言。
而编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。
其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的程序。
从高级语言,甚至运行与虚拟平台的高级语言,到机器语言,最终到硬件执行的物理信号,这一层层的转化,都涉及编译技术的应用。
本系统采用C++为编程语言。
论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键词:
编译技术,编程程序,高级语言
ClanguagecompilerdesignandImplementation
Abstract
Withthewideapplicationofthecomputer,computerprogramminglanguagesaredevelopedfromtheearlymachinelanguageintoassemblylanguage,andnowavarietyofhigh-levelprogramminglanguage.Thecompilertechnologyisthebackboneofcomputerlanguagedevelopment,butalsothefastestgrowingincomputerscience,abranchofthemostmature,heepitomizestheessenceofthecomputerandthefruitsofdevelopment.
Thecoreideaisthesamelogicalstructureoftheprogramandideasexpressedintheconversionfromonelanguagetoanotherlanguageprogramrepresented.Fromthehigh-levellanguage,andevenrunningwithhigh-levellanguagevirtualplatformtomachinelanguage,andultimatelytothehardwareimplementationofthephysicalsignal,thelayersoftransformationinvolvesapplicationofcompilertechnology.
SystemusesC++astheprogramminglanguage.Paperintroducesthedevelopmentbackgroundofthetopic,thedevelopmentandfunctiontocompletetheprocess.Notethefocusofsystemsdesign,designideas,technologiesandsolutionsdifficult.
KeyWords:
Compilertechnology,Programmingprocedures,High-levelprogramminglanguage
目 录
第一章绪论
1.1开发背景
随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。
相应地,也产生了许多用以编写这些计算机程序的高级程序设计语言。
程序编制者通过特定语言的编译器将自己编写的源程序翻译为特定机器上的目标程序,从而能够最终达到程序执行的目的。
从20世纪60年代以来,编译器设计就一直是计算机研究发展和开发领域中的一个活跃主题。
虽然编译器设计已有很长的历史,并且也是一门相对成熟的计算机技术,但编译器毕竟是一种实现由高级语言源程序至机器或汇编指令的高效映射工具,随着计算机软、硬件水平的飞速发展,使得计算机应用日新月异,程序语言的设计在不断地变化,目标机体系结构也在不断地改进,软件越来越复杂,其规模也越来越大。
尽管编译器设计问题在高级层次上没有变化(或变化很小),但当我们深入其内部研究时就会发现,编译器的内部构造其实也一直在变化。
此外,由于我们能够提供给编译器本身使用的计算资源也在不断增加。
因此,现代编译器可以采用比以前更耗费时间和空间的算法。
当然,编译技术研究人员也在继续努力开发新的、更好的技术来解决传统编译器的一些设计性问题[1]。
另一方面,很多编译“前端”技术,如文法、正则表达式、语法分析器以及语法制导翻译器等,仍然被广泛使用。
1.2开发目标和意义
编译器是一种相当复杂的系统程序,其代码的长度可从几千行到几百万行不等,所以编写甚至读懂这样的一个程序都不是一件容易的事。
绝大多数的计算机专业人员从来没有编写过一个完整的编译器,但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。
除此之外,计算机应用程序中经常遇到的一个任务就是有关命令解释程序和界面程序的开发,这比编译器的开发规模要小,但使用的却是很类似的技术。
因此,掌握编译器的开发技术具有非常重大的实际意义。
编译器的设计的原理和技术还可以用于编译器设计之外的众多领域。
因此,这些原理和技术通常会在一个计算机科学家的职业生涯中多次被用到。
研究编译器的编写讲设计程序设计语言、计算机体系结构、形式语言理论、算法和软件工程。
编译器的设计从本质上来说是一种工程活动,它所使用的方法必须很好地解决现实中出现的各种翻译问题(即用真实的语言编制且在真实的机器上能够执行的真实的程序)。
大多数情况下,开发编译器的人必须接受他们面对的语言和机器,很少能够去影响或改善这两者的设计。
在开发过程中做什么样的分析和转换,以及什么时候去做,这些都是工程上的选择,但正是这些选择决定了一个编译器的性能高低。
本实验就建立在一个自主开发的名为C的微型编译器基础之上,该编译器虽然功能弱于像TurboC或BorlandPascal这样的经典编译器,但也已经完全具备了一个编译器应有的所有特征。
虽然本实验只是一个规模很小的微型编译器的开发,但所谓“麻雀虽小,五脏俱全”,作为一次较为完整的编译开发实践,它已经足够让我透彻地了解一个编译器开发过程了,同时能更深刻地理解和运用编译开发过程中的众多技术和方法,并能在此基础上针对编译器的优化展开深入的讨论,这些对于自己以后的研究和发展方向将起到非常大的推动作用。
C编译器以C++语言作为开发语言,以MicrosoftVisualStudio2012作为开发工具,C编译器的各个阶段以类的形式表示,最后以项目文件为单位来编译生成C编译器的可执行文件。
本实验以MicrosoftVisualStudio2012作为开发工具,用标准C++进行开发,因此可以很好的的移植到其他平台(比如:
linux,用g++编译生成可执行文件)。
1.2当前编译器国内外的发展情况
在编译器技术的发展过程中,如何提高编译的效率一直是核心研究目标之一,编译效率主要是根据该编译器所生成的目标代码在执行过程中的时间指标和空间指标来衡量的,所以编译优化也必定围绕时间和空间这两个方面来实施。
在编译过程中针对代码优化的技术有很多,它们通常是通过搜集源代码或中间代码的特定信息,然后利用这些信息对代码中的数据结构或算法操作实施等价的改进变换,从而力求在时间效率和空间效率上达到一个最佳平衡点。
编译器的开发者们总是希望能够将各种代码优化技术充分地运用在自己的编译器设计中,但往往事与愿违,毕竟优化操作本身也是需要付出开销的。
在C编译器的开发过程中,虽然没有运用到太复杂的代码优化技术,但通过本实验的研究,在现有开发的C编译器基础之上,能够在后续相关项目的开发中有效地提高程序代码的编译质量,对于自己以后的研究和发展方向将起到非常大的推动作用。
这正是本实验的研究意义所在。
本实验是以C微型编译器的项目开发为基础,该项目的开发目标是自定义一种C高级语言,然后编码实现出C语言的编译器(称为C编译器),完成将C语言源程序翻译为基于MM机(MiniMachine)的目标代码的任务