编译系统透视:图解编译原理
原价:169.00
作者:新设计团队
出版社:机械工业出版社
出版日期:2016年4月
ISBN(咨询特价)
字数:277
页码:0
版次:0
装帧:平装
开本:128开
商品标识
编辑推荐
本书的出版具有里程碑意义:它*次让编译原理不再像是一门高深晦涩的“数学课”,而是一个可以调试、可以接触、可以真切感受的理论体系。本书用1140余幅信息量巨大的运行时结构图和视频动画取代了同类书中复杂枯燥的数学公尸更加立体和直观,生动地将编译后的执行程序在内存中的运行时结构图展现了出来;它*次将GCC源代码、编译原理、运行时结构、编译系统原理(包含汇编与链接)的内在关系、逻辑与原理梳理清楚了,并将它们结合成一个整体。真正能够让读者透彻掌握编译器如何运行和如何设计,以及为什么要这么设计;它是*本系统解读著名商用编译器GCC核心源代码的著作,GCC源代码一共有600万行,为了便于讲解和阅读,本书进行了取舍和裁剪,讲解了与编译本质相关的最核心的60万行代码。
内容提要
全书一共8章,具体内容和逻辑如下:第1章以一个C程序(先简单,后复杂)的运行时结构为依托,对程序编译的整体过程做了宏观讲述,让读者对编译有整体认识,这样更容易理解后面的内容。第2~6章通过实际的程序案例、结合GCC的源代码,根据程序编译的顺序和流程,依次讲解了词法分析、语法分析、中间结构和目标代码的生成,遵循了由易到难的原则,先是通过简单程序讲解清楚原理,然后再通过复杂程序强化理解。第7章讲解了与编译器紧密关联的汇编器和链接器,能让读者对可执行程序的最终生成有一个完整的了解。第8章讲解了预处理,就编译器的执行顺序而言,预处理器的执行比较靠前,之所以放在最后讲,是因为它比较独立,在读者已经了解整个编译过程中之后再讲解,读者会更容易理解。
目录
目录
作者简介
前言
第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目录作者简介前言第1章运行时结构及编译过程概述11.1一个简单C程序的运行时结构11.2更为复杂C程序的运行时结构161.3编译过程概述251.3.1词法分析251.3.2语法分析261.3.3从语法树到中间代码再到目标代码26第2章词法分析282.1词法分析概要说明282.2词法分析过程312.3状态转换图362.3.1状态转换图总体介绍362.3.2依托状态转换图展现词法分析过程422.4GCC实现词法分析的源代码552.4.1词法分析源代码总览552.4.2结合GCC源代码讲解词法分析过程552.4.3标识符、数字、字符和字符串的详细分析过程65第3章语法分析743.1语法分析综述743.2语法分析思路743.3产生式783.3.1什么是产生式783.3.2产生式的具体示例803.4匹配产生尸消除左递归893.4.1用标准产生式做匹配,出现左递归893.4.2消除左递归933.4.3产生式的工作效率973.5提取左公因子,消除回溯1003.5.1对“直接声明符”的产生式提取左公因子1003.5.2用提取过左公因子的产生式再去匹配1023.5.3对其他产生式都提取左公因子1033.5.4函数声明和定义两部分产生式的合并1053.6语法分析结果:语法树1073.7GCC关于语法分析的源代码解析1123.7.1GCC语法分析函数调用图1123.7.2全部语句的语法分析115第4章语法树到目标代码2174.1总述语法树到中间代码的转化过程2174.2目标代码到运行时结构的映射2244.3语法树转高端gimple2324.3.1语法树到高端gimple的总体步骤及运行时2364.3.2高端gimple的实际数据结构2414.3.3语法树转高端gimple的GCC源代码解析2464.4高端gimple到低端gimple2864.4.1高端gimple转低端gimple概述2864.4.2高端gimple转化低端gimple的GCC代码解析2934.5低端gimple到cfg2974.5.1低端gimple到cfg的转化概述2974.5.2低端gimple转cfg的实际过程3004.6cfg转ssa3014.7生成RTL3054.7.1为何要有RTL3054.7.2转化RTL阶段的主要步骤3064.7.3确定初始RTL中的运行时信息3204.8RTL生成目标代码(汇编)3324.8.1汇编文件介绍3324.8.2创建汇编文件3344.8.3输出汇编文件总入口3344.8.4全局变量写入汇编文件3354.8.5函数写入汇编文件340第5章语句拓展案例的编译过程3535.1总述各个语句拓展案例的编译过程3535.2if语句的语法分析3765.2.1多个变量的声明语句语法分析3765.2.2if语句的语法分析过程3815.2.3if...else if语句的语法分析过程3875.3带标号语句的语法分析3955.4switch...case、goto、break语句的语法分析过程3995.4.1switch...case 语句3995.4.2goto语句4075.4.3分析break语句4095.5do...while、while、for语句的语法分析过程4205.5.1do...while语句的语法分析4245.5.2while语句的语法分析过程4335.5.3for语句的语法分析过程4445.6各种语句嵌套组合的语法分析过程4725.6.1两条变量声明语句分析的结果4775.6.2分析while循环语句4775.6.3进入if进行分析4805.6.4进入else进行分析4855.7所有案例语法树转中间结构的过程5165.7.1案例1的语法树转高端gimple的总体介绍5165.7.2案例1的语法树转高端gimple的代码分析5285.7.3案例1的高端gimple转低端gimple5525.7.4案例1的低端gimple到cfg5525.7.5转化RTL阶段的主要步骤5625.7.6案例2的语法树转高端gimple5875.7.7案例3的语法树转高端gimple596第6章数据拓展案例的编译过程6126.1数据拓展案例的编译过程总述6126.1.1基础类型数据总述6126.1.2用户自定义类型数据总述6176.1.3指针类型数据总述6266.1.4作用域和生存期总述6406.1.5表达式总述6456.2基础类型数据的语法分析过程6526.2.1非浮点型数据的语法分析6536.2.2浮点型数据的语法分析6626.3复合类型数据的语法分析过程6706.3.1数组的语法分析6706.3.2枚举类型数据的语法分析6756.3.3struct类型数据的语法分析6786.3.4union类型数据的语法分析6836.3.5自定义数据声明和使用的语法分析6846.4指针类型数据的语法分析过程6936.4.1对swap_point函数中指针的语法分析6936.4.2对指针使用的语法分析6966.5关于作用域和生存期的语法分析过程7056.5.1C语言作用域和生存期概述7056.5.2全局变量data语法分析中作用域相关处理过程7066.5.3fun函数定义的语法分析中作用域相关处理7096.5.4main函数定义中局部变量声明data作用域处理过程7166.5.5main函数内部语句块中变量nCount作用域处理过程7196.5.6main函数中引用变量data时选择相应声明节点的过程分析7196.5.7main函数中引用变量nCount时选择相应声明节点的过程分析7206.5.8main函数中退出内部语句块时更新变量作用域过程分析7216.5.9fun函数中静态变量temp生存期信息的语法分析7266.6表达式的语法分析过程7286.6.1if条件中的表达式语法分析7286.6.2if条件下面“语句”部分的表达式语法分析7406.7所有案例语法树转中间结构(RTL)的过程7546.7.1基础类型数据语法树转高端gimple的过程7546.7.2用户自定义数据语法树转高端gimple的过程7946.7.3指针类型数据语法树转高端gimple的过程8386.7.4作用域和生存期案例语法树转高端gimple的过程8786.7.5复杂表达式案例的语法树转高端gimple的过程887第7章汇编与链接9347.1汇编器9347.1.1详细介绍汇编指令到机器指令的转化9347.1.2.o文件格式总体情况介绍9537.1.3代码段、数据段以及其他各个表项间的关系9627.1.4从汇编文件到目标文件的实现9677.1.5汇编器处理的源代码分析9737.2链接器9857.2.1.o文件链接总体介绍9857.2.2多个.o文件链接时通过符号表建立关系9897.2.3链接时统一计算地址并回填9977.2.4链接器源代码介绍9997.2.5库函数的链接10027.2.6动态链接1002第8章预处理10128.1文件包含10128.2宏定义10178.3条件编译10198.4带参数的宏定义1022附录RTX定义1031作者的话(咨询特价)
作者介绍
新设计团队
1.图示化的编译器
成功研发出基于图形、图像(而非基于字符、语句)的图示化集成开发环境,直接由图形编译为可执行程序,中间不再转成一般的计算机语言。已经能够成功的编译扫雷等界面应用程序,也可以成功编译linux0.11这样的简单操作系统,编译结果可以正确boot运行。
2.安全操作系统
研发出全新的安全操作系统。使用现有CPU,内核依据新的原理设计而成,不需要安装任何防火墙和杀毒软件,就可以抵御一切已知、未知的网络入侵。此操作系统支持ftp的基础功能,兼容Linux。此操作系统曾经于2014年4月1日至2014年9月30日在互联网上悬赏1万美金进行入侵攻击测试,至今未有人攻破。
3.基于安全CPU的安全操作系统新设计团队 新设计团队由中国科学院大学的教师杨力祥发起,成立于世纪之交,团队成员全部都是杨力祥老师的得意弟子,现在他们是很多企业核心和支柱。新设计团队不断发展、优胜劣汰、适者生存、自然形成。团队在计算机领域中始终只对最基础的、有体系的事情感兴趣,喜欢从根节点解决问题,目前已经在编译器和操作系统等领域取得了突破性的成果,具体如下:
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(美国国会图书馆)收藏。