↖  编译原理 Compilers: Principles, Techniques, and Tools..


编译原理

Alfred V. Aho , 流传 39年(始于1983年), 1075, 101, 12


编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。

编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。

编译原理课程内容主要是原理性质,高度抽象  。

编译原理的第一版出版于1986年,第二版出版于2006年;因两版封面均绘有屠龙勇士和恶龙搏斗的画面而被几代计算机科学工作者昵称为《龙书》(英語:Dragon Book)。


作者1,Alfred V. Aho是哥伦比亚大学的Lawrence Gussman计算机科学教授。Aho教授多次获奖,其中包括哥伦比亚校友会颁发的2003年度Great Teacher奖和电子与电器工程师协会的Jonh von Neumann奖章。他是美国国家工程院院士,以及ACM和IEEE的会员。

作者2,Monica S. Lam是斯坦福大学的计算机科学教授。她曾经是Tensilica的首席科学家,并且是moka5的创建者和首席执行官。她领导了SUIF项目。该项目开发了最流行的研究性编译器之一,并首创了很多在工业界得到应用的编译技术。

作者3,Ravi Sethi发起了Avaya公司的研究组织,并且是Avaya实验室的主管。之前他曾经是Bell实验室的高级副总裁,并且是Lucent科技的通信软件的首席技术官。他曾经在Pennsylvania州立大学和Arizona大学拥有教职,并在Priceton大学和Rutgers大学任教。他是ACM的会员。

作者4,Jeffery D. Ullman是Gradiance公司的首席执行官和Standford大学的Stanford W. Ascherman计算机科学(名誉退休)教授。他的研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础软件的教育技术。他是美国国家工程院的院士,ACM的会员,并且是Karlstrom奖和Knuth奖的获得者。


compiler.PNG


UfqiClsc

编译的基本流程

编译可以分为五个基本步骤:词法分析、语法分析、语义分析及中间代码的生成、优化、目标代码的生成。这是每个编译器都必须的基本步骤和流程, 从源头输入高级语言源程序输出目标语言代码。 

1 词法分析 Lexical Analysis 

词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描, 逐个字符地读, 识别出每个单词符号, 识别出的符号一般以二元式形式输出, 即包含符号种类的编码和该符号的值。词法分析器一般以函数的形式存在, 供语法分析器调用。当然也可以一个独立的词法分析器程序存在。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。 

2 语法分析  Syntax Analysis

语法分析是编译过程的第二个阶段。这阶段的任务是在词法分析的基础上将识别出的单词符号序列组合成各类语法短语, 如“语句”, “表达式”等.语法分析程序的主要步骤是判断源程序语句是否符合定义的语法规则, 在语法结构上是否正确。而一个语法规则又称为文法, 乔姆斯基将文法根据施加不同的限制分为0型、1型、2型、3型文法, 0型文法又称短语文法, 1型称为上下文有关文法, 2型称为上下文无关文法, 3型文法称为正规文法, 限制条件依次递增。 

3 语义分析 Semantic Analysis

词法分析注重的是每个单词是否合法, 以及这个单词属于语言中的哪些部分。语法分析的上下文无关文法注重的是输入语句是否可以依据文法匹配产生式。那么, 语义分析就是要了解各个语法单位之间的关系是否合法。实际应用中就是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查等。 

4 中间代码生成与优化 

在进行了语法分析和语义分析阶段的工作之后, 有的编译程序将源程序变成一种内部表示形式, 这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统, 这种记号系统复杂性介于源程序语言和机器语言之间, 容易将它翻译成目标代码。另外, 还可以在中间代码一级进行与机器无关的优化。 

UfqiClsc

5 目标代码的生成 

根据优化后的中间代码, 可生成有效的目标代码。而通常编译器将其翻译为汇编代码, 此时还需要将汇编代码经汇编器汇编为目标机器的机器语言。 

6 出错处理 

编译的各个阶段都有可能发现源码中的错误, 尤其是语法分析阶段可能会发现大量的错误, 因此编译器需要做出错处理, 报告错误类型及错误位置等信息。


----


icompiler  2011-03-25 

《编译原理》简评

  One ring to rule them all(引子指环王).这是我看到这本《编译原理》后的第一个想法,因为说起编译原理,我们不得不提起这本书,也是就是大家俗称的“龙书”。比起纷繁芜杂的数据结构,操作系统教材,编译原理教材可谓十分统一,在讲述原理方面只有龙书一本。原因很简单,因为她实在太经典了,她教授的原理至今还在我们的各个编译器中使用。
  这本书从一个实际的小例子开始,一点点展开,以编译的过程为线索,详细剖析每个环节。在讲完了基本原理之后,还讲代码优化,编译器优化等高级话题,使得该书不但有广度还有深度。如果说要的不足的话,可能实践性稍有不足,所以我推荐在学完这本书后,再读一读《现代编译原理》,使你能更好的理解《编译原理》中的知识。
  在这个IDE高度发达的时代,我们程序员为什么要学《编译原理》?其实编译原理在渗透在我们日常编程工作的方方面面。

如果你不理解编译原理中的作用域概念,那么你将很难理解JS中的闭包。

如果你不理解编译过程,那么你在做C的时候很多概念会搞的你晕头转向,比如动态库,静态库,宏展开,循环不变式等。

如果你不理解词法分析语法分析,那么你碰到ANTLR,yacc时你将手足无措。

所以说学习编译原理能够帮你更好的理解计算机程序,为你以后的发展提供坚实的基础。




  • 首发时期:1983-01-01   国家/地区:美國   语言:English
  • +原理 +词法 +文法 +编译器 +源程序

    本页Url

    ↖回首页 +当前续 +尾续 +修订 +评论✍️


    👍11 仁智互见 👎0
  • 还没有评论. → +评论
  • -loading- -loading- -loading-


    🗄️ 资源下载阅览播放

    🧑‍🤝‍🧑 作者职员演员
  • 1. 作者 :    Alfred V. Aho
  • 2. 作者 - 2 :    Monica S. Lam
  • 3. 作者 - 3 :    Ravi Sethi
  • 4. 作者 - 4 :    Jeffrey D. Ullman

  • 👨‍👩‍👧‍👦 人物角色关系
  • ----.

  • 📝 其他相关内容
  • ----.
  • -loading- -loading- -loading-


    🤖 智能推荐

    -loading- -loading- -loading-

     


    +
    AddToFav   
    新闻 常在 官宣