基本信息

编辑推荐
本书的出版具有里程碑意义:
它**次让编译原理不再像是一门高深晦涩的“数学课”,而是一个可以调试、可以接触、可以真切感受的理论体系。本书用1140余幅信息量巨大的运行时结构图和视频动画取代了同类书中复杂枯燥的数学公式,更加立体和直观,生动地将编译后的执行程序在内存中的运行时结构图展现了出来;
它**次将GCC源代码、编译原理、运行时结构、编译系统原理(包含汇编与链接)的内在关系、逻辑与原理梳理清楚了,并将它们结合成一个整体。真正能够让读者透彻掌握编译器如何运行和如何设计,以及为什么要这么设计;
它是**本系统解读著名商用编译器GCC核心源代码的著作,GCC源代码一共有600万行,为了便于讲解和阅读,本书进行了取舍和裁剪,讲解了与编译本质相关的*核心的60万行代码。
内容简介
计算机书籍
本书是编译原理领域的鸿篇巨著,中文版尚未出版,英文版权已经输出到了美国。本书的出版将在世界范围内产生重要影响。从以下多个角度讲,本书都具有重要的里程碑意义:
它第一次让编译原理不再像是一门高深晦涩的“数学课”,而是一个可以调试、可以接触、可以真切感受的理论体系。本书用1140余幅信息量巨大的运行时结构图和视频动画取代了同类书中复杂枯燥的数学公式,更加立体和直观,生动地将编译后的执行程序在内存中的运行时结构图展现了出来。
它第一次将GCC源代码、编译原理、运行时结构、编译系统原理(包含汇编与链接)的内在关系、逻辑与原理梳理清楚了,并将它们结合成一个整体,真正能够让读者透彻掌握编译器如何运行、如何设计,以及为什么要这么设计。
它是第一本系统解读著名商用编译器GCC核心源代码的著作。GCC源代码一共有600万行,为了便于讲解和阅读,本书进行了取舍和裁剪,讲解了与编译本质相关的、最核心的60万行代码。
全书一共8章,具体内容和逻辑如下:
第1章以一个C程序(先简单,后复杂)的运行时结构为依托,对程序编译的整体过程做了宏观讲述,让读者对编译有一个整体认识,这样更容易理解后面的内容。
第2~6章通过实际的程序案例、结合GCC的源代码,根据程序编译的顺序和流程,依次讲解了词法分析、语法分析、中间结构和目标代码的生成,遵循了由易到难的原则,先是通过简单程序讲解清楚原理,然后通过复杂程序强化理解。
第7章讲解了与编译器紧密关联的汇编器和链接器,让读者对可执行程序的最终生成有一个完整的了解。
第8章讲解了预处理,就编译器的执行顺序而言,预处理器的执行比较靠前,之所以放在最后讲,是因为它比较独立,在读者已经了解整个编译过程之后再讲解,读者会更容易理解。
作译者
1.图示化的编译器
成功研发出基于图形、图像(而非基于字符、语句)的图示化集成开发环境,直接由图形编译为可执行程序,中间不再转成一般的计算机语言。已经能够成功编译扫雷等界面应用程序,也可以成功编译Linux0.11这样的简单操作系统,编译结果可以正确boot运行。
2.安全操作系统
研发出全新的安全操作系统。使用现有CPU、内核依据新的原理设计而成,不需要安装任何防火墙和杀毒软件,就可以抵御一切已知、未知的网络入侵。此操作系统支持FTP的基础功能,兼容Linux。此操作系统曾经于2014年4月1日至2014年9月30日在互联网上悬赏1万美金进行入侵攻击测试,至今未有人攻破。
3.基于安全CPU的安全操作系统
根据新的操作系统原理,团队还设计了包含全新安全指令的CPU,以及由安全CPU支持的安全操作系统。目前安全CPU的指令设计已经完成,开发了安全CPU仿真平台及基于其上的全新安全操作系统。操作系统可以全面支持Linux(技术上也可以做到全面支持Windows或其他操作系统)。一旦CPU硬件设计制造完成,就可以直接运行安全操作系统,实现真正的安全(EAL7)。
新设计团队还将其对编译器和操作系统的研究理论成果集结成出版物,除本书外,还出版了《Linux内核设计的艺术》(2011年,机械工业出版社)一书,版权输出到美国、韩国,实现了国内计算机著作向美国输出的零突破。英文版被美国的MIT、Stanford、Cornell、UMD等100多所大学图书馆及Library of Congress(美国国会图书馆)收藏。
目录
前言
第1章 运行时结构及编译过程概述 1
1.1 一个简单C程序的运行时结构 1
1.2 更为复杂C程序的运行时结构 16
1.3 编译过程概述 25
1.3.1 词法分析 25
1.3.2 语法分析 26
1.3.3 从语法树到中间代码再到目标代码 26
第2章 词法分析 28
2.1 词法分析概要说明 28
2.2 词法分析过程 31
2.3 状态转换图 36
2.3.1 状态转换图总体介绍 36
2.3.2 依托状态转换图展现词法分析过程 42
2.4 GCC实现词法分析的源代码 55
2.4.1 词法分析源代码总览 55
2.4.2 结合GCC源代码讲解词法分析过程 55
2.4.3 标识符、数字、字符和字符串的详细分析过程 65
第3章 语法分析 74
前言
对程序员来说,提高编程水平最关键的因素之一就是了解程序的运行时结构,只有了解了自己编写的源代码运行的时候在内存中是什么样的(运行时结构),才能真正写出高质量的代码。编译器是将源代码转化为最终运行时结构的工具,如何实现运行时结构正是本书最重要的一条主线。编译器是一个非常经典的程序,其中包含的很多技术已广泛应用于其他软件(如文字处理软件、数据库、Web开发程序等)。读懂编译器的源代码,对计算机软件的很多方面来说都会有借鉴作用。
一般介绍编译原理的书籍通常都是空泛地讲一些抽象的概念,甚至夹杂不少晦涩的数学公式,脱离了具体的编译器,基本上没有编译器的源代码,初学者很难理解。
而本书则是以一个真实、具体、商用GCC编译器的源代码为蓝本,以几个案例程序的实际编译为线索,详细讲解编译案例程序的源代码的具体过程。
本书先对读者最难理解的复杂过程、关系和数据结构以动画视频的方式进行直观、形象的讲解。看过这些视频,读者就会对编译原理有一个概略、直观、整体的理解,从而很容易掌握更深的内容。纸质内容再将编译原理与GCC编译器的源代码有机联系起来,用了大量直观的图示、源代码、文字做详细讲解。
本书没有用一个数学公式,力争用最简单易懂的语言把深奥的理论讲明白。读者在看完本书后会真正了解一个编译器是如何运行的,以及为什么要这么设计,更重要的是知道编译完的程序执行时在内存中的运行时结构是什么样的。
我们还为读者提供了一个缩减版的GCC源代码。原版的GCC源代码大约有600万行,是一个适用于多种计算机语言的编译器,体量过于庞大,几乎无法在短时间内阅读、理解,甚至很难记忆。我们只保留了C语言的相关部分,并去掉了错误分析、处理和优化的相关部分,大约只有130万行,其中约50万行是为了与具体指令集相关,由机器生成的代码,仅涉及后端;在剩下的80万行代码中,与编译本质相关的核心代码大约有60万行。此外,我们还提供了与之相对应的汇编器和链接器的源代码,这些代码虽然不是编译器的一部分,但却是生成完整的可执行程序必不可少的。我们还提供了一整套的开发调试环境,既有适用于Linux的,也有适用于Windows的。读者可以在一个比较小的范围内随着本书的讲解跟踪调试,这样效率更高。读者在阅读的时候始终都能与真实的编译过程、真实的编译器源代码紧密相连。本书的编译原理不再像一门“数学课”,而是一个可以调试、可以接触、可以真切感受的理论体系。
读者只要了解C语言的语法规则,会使用C语言编写一些简单的程序,就能看懂本书。
本书内容安排
第1章的前半部分先讲解程序的运行时结构。如我们一再强调,运行时是程序执行的关键,编译器正是将源代码转化为可执行程序并形成运行时结构的工具。对于只是想提高开发能力的程序员,这部分几乎起到了90%的作用。
第1章的后半部分对整体的编译过程做了一个综述。当读者对整体有概念的时候,再去看每个章节的具体内容,会更容易理解。
第2章用一个简单案例讲解词法分析。词法分析是把源文件中的内容读出并识别出符号的过程。
第3章继续用词法分析时的简单案例讲解语法分析。语法分析是在词法分析的结果中识别出语句的过程。
第4章仍用前面的简单案例生成中间结构及目标代码。
第5章和第6章用几个更为复杂的案例来分析语法和生成中间结构及目标代码的过程。
至此,严格意义上的编译过程已经讲解完毕。为了让读者对最终生成的可执行程序有一个完整的了解,我们专门安排了汇编器、链接器的内容,这就是第7章。
第7章详细讲解如何将目标代码转变为可执行程序,包括文件格式、汇编器和链接器的内容。
第8章讲预处理。从编译器的执行顺序来看,预处理器的执行是比较靠前的,之所以把预处理放在最后讲,是因为预处理比较独立,在介绍完整个编译过程之后再讲解,读者更容易理解。
其中第1~3章都配了相应的视频,建议在看纸质内容之前先看视频。
致谢