编译原理知识点总结

2022-10-25 08:14:33 精品范文 下载本文

第1篇:编译原理知识点总结

编译原理知识点总结

编译原理是大学计算机专业的必修科目,也是计算机的基础知识,学好编译原理,有助于更好的进行编程的操作,下面是编译原理知识点总结,一起来看看吧!

编译原理知识点总结

一 编译器

简单讲,编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器

(preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)

二 工作原理

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。

也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序

三 编译器的发展史

(1) 20世纪50年代

IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的`研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。

人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。

当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。

在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

(2) 国内编译器的研发历史

我国编译器研发工作起步并不算晚,早在60年代初期,董韫美院士和杨芙清院士就分别在中科院和北大领导研究组开发编译器,那时面向的高级语言是ALGOL和FORTRAN,目标机是国产机。

在改革开放前,由于国家需要,中科院、国防科大、江南计算所、北大等单位一直在研制国产计算机,包括大型机和高性能计算机(如向量机、并行机),相应的也在研制高级语言编译器。中科院计算所以董韫美院士领导的研究组先后开发了119机、109机的类 ALGOL语言编译器BCY。国防科大开发了向量编译器和向量识别器。

70年代中科院计算所张兆庆教授研究组(以后称ACTGroup)开始在国产机上研制FORTRAN语言编译器,先后参与了众多的院级和国家级科研攻关项目,主持开发了013,757,KJ8920等国产大型机系统中的FORTRAN语言编译器,所研制的编译器支持了数百万行应用软件的运行。

90年代以来ACTGroup承担科学院重大项目,国家攻关项目,863项目,以及国际合作项目,先后开发了共享内存多处理机的并行识别器,分布式内存多处理机的并行识别器, SIMD芯片和VLIW芯片的并行优化C编译器。将编译技术与图形学结合,ACTGroup还推出了集成化、可视化的并行编程环境。ACTGroup在先进编译技术和并行编程环境方面的研究工作获国内外专家高度评价,国际著名学者评价此研究组居编译领域的世界先进行列。

(3) 研究现状

编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。

在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。

大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。

(4)国内编译器开发的现状

90年代以来,国内主要以研制并行机为主,相应的并行编译器研制也在国内开展起来。代表性的成果有:上海复旦大学朱传琪教授研究组研制的面向共享存储并行机的并行优化编译器AFT达到世界领先水平。

清华大学汤志忠教授研究组在软流水优化技术上做了很优秀的研究工作。清华大学郑纬民教授研究组开发了交互式并行化系统 TIPSExplorer,北京大学许卓群教授、李晓明教授研究组在HPF(High Performance Fortran)编译器方面做了多年工作,取得很好的研究成果。此外,国防科大、江南计算所等单位也都有从事并行编译技术研究。随着芯片研制,国内还有若干单位也在开展基于GCC生成面向特定芯片的编译器工作。

第2篇:编译原理 学习心得

国际学院 0802 杨良燕 200819100227

《编译原理》课程学习心得

《编译原理》是计算机专业的一门重要课程,正如教材

第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)的等价程序”。

通过这一学期的学习,我觉得编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。因而,我们需要更多的时间来理解、掌握相关的知识,当然在这一过程中也存在很多问题,比如我们后期学习具体文法的分析方法时,对于文法的概念不够清晰,影响了上课的效率,知道老师再次给我们讲解了文法等基础的知识点,我们才慢慢掌握后面所学的LL(1)文法等,也发现了知识点之间的关联。此外,这门课程的课时被安排得很少,一周只有一次,这样很不利于我们对这门重要课程的理解和掌握。但是我觉得我们很幸运,因为老师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,对于我们提出的问题,无论课上或是课外,老师一直是不厌其烦,甚至利用课余时间为我们讲解重要的难题。

编译原理这门课程不仅仅在于其本身的理论价值,更在于为我们解决问题提供的思维方式和方法。从LL(1)到LR(0),问题不断被解决的同时,又有一个个新的问题提了出来。对计算机语言世界的知识积累,像滚雪球一样越滚越大。这个逐渐递进,逐渐解决问题的过程对我来说是收获很大的。整个过程好像踏着前人研究编译理论的路线,不断感觉他们遇到的问题,更重要的是他们解决问题的思路。编译原理的课程带给我的不只是如何去编译程序这样的理论知识,相信更重要的是一种如何“自动计算”的思路。通过对相关编译问题的具体分析,让我体会最深的是一种“自动计算”的思想,同时完成编译试验后,更是感到了一种“自动计算”的快乐。”然而我明白自己虽然对编译有了一定的了解,我懂得了文法的分析,学会了构造确定和非确定有限自动机,学会了LL(1)文法和LR(0)文法等,但是并没有完全掌握,对于这些知识点的实质性和其他方面,更是认识不深。作为一名学习计算机科学与技术的学生,我明白编译原理是软件工程的基础,课程的结束并不意味着学习的结束,只有通过以后的学习,才能更深入地了解编译原理。

第3篇:编译原理论文

编译原理心得体会

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法,在计算机本科教学中占有十分重要的地位。

该课程理论性与实践性都很强,我们在学习是普遍感到内容非常抽象,不易理解,内容多且繁琐,难以完整、全面地掌握编译原理的有关知识,更不用说灵活运用编译原理知识从事相关设计或应用于其他领域。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对我们提供了系统而有效的训练,有利于提高软件人员的素质和能力。

在我们学习编译原理以前,都认为编译原理只能应用在写程序语言的编译器上,觉得用处不大,学习兴趣不高。而在后来的学习中,我们逐渐认识到计算机专业的学生,除了要会编写程序语言之外,还应该了解它是如何被计算机所识别,这才是真正并且透彻地学习软件。另外,编译器中每一个模块的编写,都能对我们的编程能力的提高有很大帮助。在今后若从事软件工程,这门课程也能够对编写程序有所帮助。

为了能够系统掌握这门专业课,我们把编译原理分为以下几个模块:①语言和文法;②词法分析;③语

未完,继续阅读 >

第4篇:编译原理实验报告

编译原理实验报告

报告完成日期 2018.5.30

一. 组内分工与贡献介绍

二. 系统功能概述;

我们使用了自动生成系统来完成我们的实验内容。我们设计的系统在完成了实验基本要求的前提下,进行了一部分的扩展。增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。

三. 分系统报告;

一、词法分析子系统

词法的正规式:

标识符

(|)* 十进制整数

0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和分隔符 +| * | / | > | =|==; 对于标识符和关键字: A5—〉 B5C5 B5—〉a | b |⋯⋯| y | z C5—〉(a | b |⋯⋯| y | z |0

未完,继续阅读 >

第5篇:编译原理试题

《编译原理》试题A

1.名词解释

短语

LL(1)文法 语法分析

无环路有向图(DAG)语法制导翻译

2. Pascal语言无符号数的正规定义如下:

num  digit+(.digit+)?(E(+|-)? digit+)? 其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。

3.下面两个文法中哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有移进-归约冲突的规范的LR(1)项目集。

S  aAc

S  aAc

A  bbA | b

A  bAb | b

4.构造下面文法的LL(1)分析表。

D  TL T  int | real L  id R R  , id R | 

5. C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。

6.把表达式

-(a+b)*(c+d)+(a+b+c)翻译成三元式。

7.为下面文

未完,继续阅读 >

第6篇:编译原理教学大纲

编译原理教学大纲

一、课程的性质、地位

本课程是计算机专业的重要专业课之一,是一门理论性和实践性较强的课程。主要介绍程序设计语言编译程序构造的基本原理和基本实现方法。本课程主要讲授形式语言、有限自动机、自上而下和自下而上的语法分析、LR分析方法、属性文法和语法制导翻译、语义分析的代码产生、存储器的动态分配与管理、符号表的组织与管理、优化问题、代码生成等内容。通过本课程学习,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。

二、课程的目的、任务和要求

该课程的目的是让学生掌握程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。通过本课程的学习,使学生较好地掌握编译原理的基本原理和基本技术、编译原理中涉及的基本算法、基本结构和主要实现技术,从而让学生了解将高级程序设计语言源程序翻译成计算机能处理的目标代码语言的整个过程,基本掌握计算机系统软件之一 编译程序的构造原理及相关技术,同时,还可提高学生计算机专业素质,培养学生的抽象思维能力。通

未完,继续阅读 >

第7篇:编译原理期末总结复习

编译原理期末总结复习

篇一:

一、简答题

1.什么是编译程序?

答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序 。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?

答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)

– 其中Vn表示非终结符号

– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ

– S是开始符号,

– P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)

3.语法分析阶段的功能是什么?

答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:

程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?

答:优化技术1—删除公共子表达式

优化技术2—复写传播

优化技术3—删除无用代码

优化技术4—对程序进行代数恒等变换(降低运算强度)

优化技术5—代码外提

优化技术6—强度削弱

优化技术7—删除归纳变量

优化技术简介——对程序进

未完,继续阅读 >

第8篇:编译原理期末总结复习

编译原理期末总结复习(锦集12篇)由网友 “eiidmbcila” 投稿提供,下面是小编收集整理的编译原理期末总结复习,仅供参考,希望能够帮助到大家。

篇1:编译原理期末总结复习

一、简答题

1.什么是编译程序?

答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序 。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?

答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)

– 其中Vn表示非终结符号

– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ

– S是开始符号,

– P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)

3.语法分析阶段的功能是什么?

答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:

程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?

答:优化技术1—删除公共子表达式

优化技术2—复写传播

优化技术3—删除

未完,继续阅读 >

《编译原理知识点总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
编译原理知识点总结
点击下载文档
相关专题
[精品范文]相关推荐
[精品范文]热门文章
下载全文