文献检索论文.docx
《文献检索论文.docx》由会员分享,可在线阅读,更多相关《文献检索论文.docx(11页珍藏版)》请在冰豆网上搜索。
文献检索论文
关于如何利用编译原理进行编译程序的设计的检索报告
一、分析研究课题
如何利用编译原理进行编译程序的设计
二、选择数据库或检索工具
CNKI数据库、重庆维普、万方数据
三、制定检索策略
检索式:
编译原理*编译程序设计
四、记录检索结果
1、检索工具名称:
CNKI数据库
检索策略:
编译原理*编译程序设计
命中结果总数:
2
检索结果列表:
徐旭东,蒋宗礼.论编译原理在程序设计类课程建设中的重要作用[J].计算机教育,2011,(18).
【摘要】阐述程序设计类课程群在计算机专业教学中占有的重要地位,探讨课程群中课程之间密切的关联关系,提出以编译原理课程为重心,按照专业能力培养的需要,充分利用这些关联关系,有效提升整个课程群的教学效果。
2、检索工具名称:
重庆维普
检索策略:
编译原理*编译程序设计
命中结果总数:
1
检索结果列表:
唐良.编译原理学习导论[J].程序员:
CSDN开发高手,2006,(6).
【摘要】编译程序设计原理课程为大学本科、研究生的必修课程,是计算科学最重要的基础课程之一,本文的作者结合自己学习研究编译原理的经历为读者们介绍本学科的学习方法和学习材料,望能对编译原理的学习者有所裨益。
3、检索工具名称:
万方数据
检索策略:
编译原理*编译程序设计
命中结果总数:
56
检索结果列表:
陈意云,张昱郑,启龙.《编译原理》的教学与实际相结合的探讨[J].教育与现代化,2005,(4).
【摘要】本文介绍<编译原理>课程教学中的一些经验。
主要介绍笔者是如何通过分析典型程序在编译或运行时的报错信息、生成目标代码和运行输出中,巧妙地激发学生的学习热情和帮助他们牢固掌握理论和技术的。
五、小结
通过使用重庆维普、CNKI、万方数据这三个数据库进行文献检索,我感觉这三个数据库都有着各自的优点。
如重庆维普数据十分广泛,包含了1989年至今的12000余种期刊刊载的2300余万篇文献,引文总量达到3000余万篇,年更新数据达到300余万条。
覆盖范围很广,分类体系完善也很完善。
而万方数据充分满足了学者从事课题立项,学术研究,论文撰写,知识学习的需要;为科研人员进行成果查新和鉴定,为生产者查询生产规程和促进标准化作业,提供权威科技信息库;为企业经营者提供丰富企业竞争情报及经营管理文献。
满足了不同行业不同岗位不同用途使用者的个性化知识信息需求。
而他提供相关主题词的一站式链接,另其庞大的知识网络系统包括参考文献,相似文献,引用文献的链接检索,相关检索词,相关专家,相关机构导航更是丰富了研究主体和客体扩展范围,使知识学习更具系统化,信息化,高效化。
CNKI的优点是定位准、起点高:
起名为“中国知识基础设施工程”(CNKI),直接定位为知识经济服务;收录全、学科覆盖面广;系统设计先进、并不断完善;用户界面友好,使用方便:
检索途径多,引得深度大。
由此看来每个检索工具都有共通性,但也有着各自的特点,所以当我们在进行一个课题的研究时,应综合运用各种检索工具,使自己的课题研究可以更加的宽泛和深入。
在检索与自己课题相关的资料时,也遇到了很多问题,如很多数据库都是收费的,这给我们带来了很多不便,不过学校购有相关数据库的使用权,可以让我们自行免费检索,但也有时间限制,如重庆维普2006年以后发表的文献就检索不到了。
更大的问题在于检索时很多检索结果跟自己想要找的不符,这跟我自己检索策略的制定不准确有关,今后我会不断学习,不断提高,努力完善这方面的不足。
关于如何利用编译原理进行编译程序的设计的课题研究
年级:
学号:
姓名:
专业:
二零一二年四月五日
摘要(Abstract)
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。
内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。
虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。
编译程序是计算机系统不可缺少的部分,是程序设计者的必备工具。
学习并掌握编译程序的构造原理和实用技术,能够提高对程序序言语言的理解,提高程序设计,尤其是大型软件的设计能力。
本课题着重于研究如何利用编译原理进行编译程序的设计。
关键词:
编译原理;编译程序设计;计算机
目录
摘要(Abstract)IV
一、研究目的2
二、基本概念2
三、发展历程2
四、相关程序3
1.解释程序3
2.汇编程序3
3.连接程序3
4.装入程序3
5.预处理器3
6.编辑器3
7.调试程序3
五、编译步骤4
1.扫描程序4
2.语法分析程序4
3.目标代码优化程序4
六、其他问题5
1.分析和综合5
2.前端和后端5
参考文献6
一、研究目的
计算机编译原理在编译程序的设计中有着十分重要的作用。
计算机原理是将计算机内部的工作原理,比如二进制的加减乘除、内部通信机制等等,这些对以后的编程学习作用不是很大,但是当编程过程中,因为某些个十六进制、二进制、数据类型等引起程序无法运行时,就会明白,平时极少用到的绣花针,在关键时刻,是非常的有用的。
编译原理是讲述机器是如何将高级程序语言转换成机器唯一能懂的机器语言的,以及编译软件是如何工作的。
掌握了这些,就好像掌握了武功心法一样,即便所有的编程语言虽然各有各的特点,千变万化,但是万变不离其中,编译原理还是那一套,掌握了武功心法,对以后学习这些高级编程语言,都是大有裨益的。
二、基本概念
编译器是将一种语言翻译为另一种语言的计算机程序。
编译器将源程序编写的程序作为输入,而产生用目标语言编写的等价程序。
通常地,源程序为高级语言如C或C++,而目标语言则是目标机器的目标代码,也就是写在计算机机器指令中的用于运行的代码。
这一过程可以表示为:
源程序→编译器→目标程序
三、发展历程
在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。
开始时,这些程序都是用机器语言编写的。
机器语言就是表示机器实际操作的数字代码,但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言代替了。
在汇编语言中,都是以符号形式给出指令和存储地址的。
汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。
但是,汇编语言也有许多缺点:
编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。
例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式x=2。
分析问题的研究是在20世纪60年代和70年代,它相当完善地解决了这一问题,现在它已是编译理论的一个标准部分。
它们与乔姆斯基的3型文法相对应。
对它们的研究与乔姆斯基的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。
编译器设计最近的发展包括:
首先,编译器包括了更为复杂的算法的应用程序,它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言(可允许此类分析)的发展结合在一起。
其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。
其次,编译器已越来越成为基于窗口的交互开发环境的一部分,它包括了编辑器、链接程序、调试程序以及项目管理程序。
这样的IDE的标准并没有多少,但是已沿着这一方向对标准的窗口环境进行开发了。
四、相关程序
1.解释程序
解释程序是如同编译器的一种语言翻译程序。
它与编译器的不同之处在于:
它立即执行源程序而不是生成在翻译完成之后才执行的目标代码。
从原理上讲,任何程序设计语言都可被解释或被编译,但是根据所使用的语言和翻译情况,很可能会选用解释程序而不用编译器。
2.汇编程序
汇编程序是用于特定计算机上的汇编语言的翻译程序。
正如前面所提到的,汇编语言是计算机的机器语言的符号形式,它极易翻译。
有时编译器会生成汇编语言以作为其目标语言,然后再由一个汇编程序将它翻译成目标代码。
3.连接程序
编译器和汇编程序都经常依赖于连接程序,它将分别在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中。
在这种情况下,目标代码,即还未被连接的机器代码,与可执行的机器代码之间就有了区别。
连接程序还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机的操作系统提供的资源(例如,存储分配程序及输入与输出设备)。
连接程序现在正在完成编译器最早的一个主要活动。
连接过程对操作系统和处理器有极大的依赖性。
4.装入程序
编译器、汇编程序或连接程序生成的代码经常还不完全适用或不能执行,但是它们的主要存储器访问却可以在存储器的任何位置中且与一个不确定的起始位置相关。
这样的代码被称为是可重定位的,而装入程序可处理所有的与指定的基地址或起始地址有关的可重定位的地址。
装入程序使得可执行代码更加灵活,但是装入处理通常是在后台(作为操作环境的一部分)或与连接相联合时才发生,装入程序极少会是实际的独立程序。
5.预处理器
预处理器是在真正的翻译开始之前由编译器调用的独立程序。
预处理器可以删除注释、包含其他文件以及执行宏替代。
预处理器可由语言(如C)要求或以后作为提供额外功能的附加软件。
6.编辑器
编译器通常接受由任何生成标准文件的编辑器编写的源程序。
现在,编译器已与另一个编辑器和其他程序捆绑进一个交互的开发环境-IDE中。
此时,尽管编辑器仍然生成标准文件,但会转向正被讨论的程序设计语言的格式或结构。
这样的编辑器称为基于结构的,且它早已包括了编译器的某些操作;因此,程序员就会在程序的编写时而不是在编译时就得知错误了。
从编辑器中也可调用编译器以及与它共用的程序,这样程序员无需离开编辑器就可执行程序。
7.调试程序
调试程序是可在被编译了的程序中判定执行错误的程序,它也经常与编译器一起放在IDE中。
运行一个带有调试程序的程序与直接执行不同,这是因为调试程序保存着所有的或大多数源代码信息。
它还可以在预先指定的位置暂停执行,并提供有关已调用的函数以及变量的当前值的信息。
为了执行这些函数,编译器必须为调试程序提供恰当的符号信息,而这有时却相当困难,尤其是在一个要优化目标代码的编译器中。
因此,调试又变成了一个编译问题。
五、编译步骤
1.扫描程序
在这个阶段编译器实际阅读源程序(通常以析程序字符流的形式表示)。
扫描程序执行词法分析注释树符号表(Lexicalanalysis):
它将字符序列收集到称作记号错误处(token)的有意义单元中,记号同自然语言,如英源代码理器语中的字词相似。
因此可以认为扫描程序执行与优化程序拼写相似的任务。
中间代码例如在下面的代码行(它可以是C程序的一部分)中:
代码生成器a[index]=4+2这个代码包括了12个非空字符,但只有8个目标代码记号:
a 标识符目标代码优化程序[左括号index标识符]右括号= 赋值目标代码4数字编译器的阶段+加号2数字每一个记号均由一个或多个字符组成,在进一步处理之前它已被收集在一个单元中。
扫描程序还可完成与识别记号一起执行的其他操作。
例如,它可将标识符输入到符号表中,将文字(litral)输入到文字表中(文字包括诸如3.1415926535的数字常量,以及诸如“Hello,world!
”的引用字符串)。
2.语法分析程序
语法分析程序从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析(syntaxanalysis),这与自然语言中句子的语法分析类似。
语法分析定义了程序的结构元素及其关系。
通常将语法分析的结果表示为分析树(parsetree)或语法树(syntaxtree)。
例如,还是那行C代码,它表示一个称为表达式的结构元素,该表达式是一个由左边为下标表达式、右边为整型表达式的赋值表达式组成。
这个结构可按下面的形式表示为一个分析树:
请注意,分析树的内部节点均由其表示的结构名标示出,而分析树的叶子则表示输入中的记号序列(结构名以不同字体表示以示与记号的区别)。
分析树对于显示程序的语法或程序元素很有帮助,但是对于表示该结构却显得力不从心了。
分析程序更趋向于生成语法树,语法树是分析树中所含信息的浓缩(有时因为语法树表示从分析树中的进一步抽取,所以也被称为抽象的语法树(abstractsyntaxtree))。
下面是一个C赋值语句的抽象语法树的例子:
请注意,在语法树中,许多节点(包括记号节点在内)已经消失。
例如,如果知道表达式是一个下标运算,则不再需要用括号“[”和“]”来表示该操作是在原始输入中。
3.目标代码优化程序
在这个阶段中,编译器尝试着改进由代码生成器生成的目标代码。
这种改进包括选择编址模式以提高性能、将速度慢的指令更换成速度快的,以及删除多余的操作。
在上面给出的样本目标代码中,还可以做许多更改:
在第2条指令中,利用移位指令替代乘法(通常地,乘法很费时间),还可以使用更有效的编址模式(例如用索引地址来执行数组存储)。
使用了这两种优化后,目标代码就变成:
MOVR0,index;;
valueofindex->R0SHLR0;;
doublevalueinR0MOV&a[R0],6;;
constant6->addressa+R0
六、其他问题
1.分析和综合
在这个观点中,已将分析源程序以计算其特性的编译器操作归为编译器的分析(analysis)部分,而将生成翻译代码时所涉及到的操作称作编译器的综合(synthesis)部分。
当然,词法分析、语法分析和语义分析均属于分析部分,而代码生成却是综合部分。
在优化步骤中,分析和综合都有。
分析正趋向于易懂和更具有数学性,而综合则要求更深的专业技术。
因此,将分析步骤和综合步骤两者区分开来以便发生变化时互不影响是很有用的。
2.前端和后端
本观点认为,将编译器分成了只依赖于源语言(前端(frontend))的操作和只依赖于目标语言(后端(backend))的操作两部分。
这与将其分成分析和综合两部分是类似的:
扫描程序、分析程序和语义分析程序是前端,代码生成器是后端。
但是一些优化分析可以依赖于目标语言,这样就是属于后端了,然而中间代码的综合却经常与目标语言无关,因此也就属于前端了。
在理想情况下,编译器被严格地分成这两部分,而中间表示则作为其间的交流媒介。
这一结构对于编译器的可移植性(portability)十分重要,此时设计的编译器既能改变源代码(它涉及到重写前端),又能改变目标代码(它还涉及到重写后端)。
在实际中,这是很难做到的,而且称作可移植的编译器仍旧依赖于源语言和目标语言。
其部分原因是程序设计语言和机器构造的快速发展以及根本性的变化,但是有效地保持移植一个新的目标语言所需的信息或使数据结构普遍地适合改变为一个新的源语言所需的信息却十分困难。
然而人们不断分离前端和后端的努力会带来更方便的可移植性。
参考文献
[1]徐旭东,蒋宗礼.论编译原理在程序设计类课程建设中的重要作用[J].计算机教育,2011,(18).
[2]陈意云,张昱郑,启龙.《编译原理》的教学与实际相结合的探讨[J].教育与现代化,2005,(4).
[3]唐良.编译原理学习导论[J].程序员:
CSDN开发高手,2006,(6).
[4]刘磊,金英,王胜军,刘欣欣,苏晨阳.编译原理多媒体辅助教学软件的设计与实现[J].吉林大学学报,2002,20
(2).
[5]卢晓莹.编译原理课程的调态与转型[J].科技信息,2010,(13).
[6]王一宾.基于面向对象的编译原理实验的研究[J].安庆师范学院学报,2002,8(4).
[7]刘慧.编译原理中处理语法错误问题的研究[J].计算机教育,2007,(5).
[8]腾华,刘敏.《程序设计语言编译原理》教改探讨[J].四川师范学院学报,2003,24
(1).
[9]赵蔓.编译技术——SIMPLE语言的语法制导翻译程序的设计[J].中国科技博览,2010,(36).
[10]吕振哄.用结构化程序设计思想指导汇编语言开发[J].自动化技术与应用,2001,
(1).
[11]王玫.程序设计语言模型的设计与实现[D].山东科技大学,2004