您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
编译系统透视
装帧: 平装
出版社: 机械工业出版社
作者: 新设计团队 著
出版日期: 2016-03-01
商品条码: 9787111498582
版次: 1
开本: 16开
页数: 1041
出版年份: 2016
定价:
¥169
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
内容简介
靠前章的前半部分首先讲解程序的运行时结构。编译器正是将源代码转化为可执行程序并形成运行时结构的工具。对于只是想提高开发能力的程序员,这部分几乎起到了90%的作用。靠前章的后半部分对整体的编译过程做了一个综述。当读者对整体有概念的时候,再去看每个章节的具体内容,会更容易理解。第2章用一个简单案例讲解词法分析,词法分析是把源文件文件中的内容读出并识别出符号的过程。第3章用词法分析的简单案例讲解语法分析,语法分析是在词法分析的结果中识别出语句的过程。第4章仍用前面的简单案例生成中间结构及目标代码。第5、6章用几个更为复杂的案例来分析语法及生成中间结构及目标代码的过程。至此,严格意义上的编译过程已经讲解完毕。为了让读者对可执行程序的很终生成有一个完整的了解,我们专门安排了讲解汇编器、链接器的内容,这就是第7章。第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
2.3.2依托状态转换图展现词法分析过程42
2.4GCC实现词法分析的源代码55
2.4.1词法分析源代码总览55
2.4.2结合GCC源代码讲解词法分析过程55
2.4.3标识符、数字、字符和字符串的详细分析过程65
第3章语法分析74
3.1语法分析综述74
3.2语法分析思路74
3.3产生式78
3.3.1什么是产生式78
3.3.2产生式的具体示例80
3.4匹配产生式,消除左递归89
3.4.1用标准产生式做匹配,出现左递归89
3.4.2消除左递归93
3.4.3产生式的工作效率97
3.5提取左公因子,消除回溯100
3.5.1对“直接声明符”的产生式提取左公因子100
3.5.2用提取过左公因子的产生式再去匹配102
3.5.3对其他产生式都提取左公因子103
3.5.4函数声明和定义两部分产生式的合并105
3.6语法分析结果:语法树107
3.7GCC关于语法分析的源代码解析112
3.7.1GCC语法分析函数调用图112
3.7.2全部语句的语法分析115
第4章语法树到目标代码217
4.1总述语法树到中间代码的转化过程217
4.2目标代码到运行时结构的映射224
4.3语法树转高端gimple232
4.3.1语法树到高端gimple的总体步骤及运行时236
4.3.2高端gimple的实际数据结构241
4.3.3语法树转高端gimple的GCC源代码解析246
4.4高端gimple到低端gimple286
4.4.1高端gimple转低端gimple概述286
4.4.2高端gimple转化低端gimple的GCC代码解析293
4.5低端gimple到cfg297
4.5.1低端gimple到cfg的转化概述297
4.5.2低端gimple转cfg的实际过程300
4.6cfg转ssa301
4.7生成RTL305
4.7.1为何要有RTL305
4.7.2转化RTL阶段的主要步骤306
4.7.3确定初始RTL中的运行时信息320
4.8RTL生成目标代码(汇编)332
4.8.1汇编文件介绍332
4.8.2创建汇编文件334
4.8.3输出汇编文件总入口334
4.8.4全局变量写入汇编文件335
4.8.5函数写入汇编文件340
第5章语句拓展案例的编译过程353
5.1总述各个语句拓展案例的编译过程353
5.2if语句的语法分析376
5.2.1多个变量的声明语句语法分析376
5.2.2if语句的语法分析过程381
5.2.3if...elseif语句的语法分析过程387
5.3带标号语句的语法分析395
5.4switch...case、goto、break语句的语法分析过程399
5.4.1switch...case语句399
5.4.2goto语句407
5.4.3分析break语句409
5.5do...while、while、for语句的语法分析过程420
5.5.1do...while语句的语法分析424
5.5.2while语句的语法分析过程433
5.5.3for语句的语法分析过程444
5.6各种语句嵌套组合的语法分析过程472
5.6.1两条变量声明语句分析的结果477
5.6.2分析while循环语句477
5.6.3进入if进行分析480
5.6.4进入else进行分析485
5.7所有案例语法树转中间结构的过程516
5.7.1案例1的语法树转高端gimple的总体介绍516
5.7.2案例1的语法树转高端gimple的代码分析528
5.7.3案例1的高端gimple转低端gimple552
5.7.4案例1的低端gimple到cfg552
5.7.5转化RTL阶段的主要步骤562
5.7.6案例2的语法树转高端gimple587
5.7.7案例3的语法树转高端gimple596
第6章数据拓展案例的编译过程612
6.1数据拓展案例的编译过程总述612
6.1.1基础类型数据总述612
6.1.2用户自定义类型数据总述617
6.1.3指针类型数据总述626
6.1.4作用域和生存期总述640
6.1.5表达式总述645
6.2基础类型数据的语法分析过程652
6.2.1非浮点型数据的语法分析653
6.2.2浮点型数据的语法分析662
6.3复合类型数据的语法分析过程670
6.3.1数组的语法分析670
6.3.2枚举类型数据的语法分析675
6.3.3struct类型数据的语法分析678
6.3.4union类型数据的语法分析683
6.3.5自定义数据声明和使用的语法分析684
6.4指针类型数据的语法分析过程693
6.4.1对swap_point函数中指针的语法分析693
6.4.2对指针使用的语法分析696
6.5关于作用域和生存期的语法分析过程705
6.5.1C语言作用域和生存期概述705
6.5.2全局变量data语法分析中作用域相关处理过程706
6.5.3fun函数定义的语法分析中作用域相关处理709
6.5.4main函数定义中局部变量声明data作用域处理过程716
6.5.5main函数内部语句块中变量nCount作用域处理过程719
6.5.6main函数中引用变量data时选择相应声明节点的过程分析719
6.5.7main函数中引用变量nCount时选择相应声明节点的过程分析720
6.5.8main函数中退出内部语句块时更新变量作用域过程分析721
6.5.9fun函数中静态变量temp生存期信息的语法分析726
6.6表达式的语法分析过程728
6.6.1if条件中的表达式语法分析728
6.6.2if条件下面“语句”部分的表达式语法分析740
6.7所有案例语法树转中间结构(RTL)的过程754
6.7.1基础类型数据语法树转高端gimple的过程754
6.7.2用户自定义数据语法树转高端gimple的过程794
6.7.3指针类型数据语法树转高端gimple的过程838
6.7.4作用域和生存期案例语法树转高端gimple的过程878
6.7.5复杂表达式案例的语法树转高端gimple的过程887
第7章汇编与链接934
7.1汇编器934
7.1.1详细介绍汇编指令到机器指令的转化934
7.1.2.o文件格式总体情况介绍953
7.1.3代码段、数据段以及其他各个表项间的关系962
7.1.4从汇编文件到目标文件的实现967
7.1.5汇编器处理的源代码分析973
7.2链接器985
7.2.1.o文件链接总体介绍985
7.2.2多个.o文件链接时通过符号表建立关系989
7.2.3链接时统一计算地址并回填997
7.2.4链接器源代码介绍999
7.2.5库函数的链接1002
7.2.6动态链接1002
第8章预处理1012
8.1文件包含1012
8.2宏定义1017
8.3条件编译1019
8.4带参数的宏定义1022
附录RTX定义1031
作者的话1039
摘要
掌握程序在内存中的运行时结构对提高程序设计水平的重要性再怎么强调都不过分,将程序员编写的源代码转化为可执行程序是由编译器完成的,编译器对运行时结构的形成起着非常重要的作用。如果你想提高自己的编程水平,了解编译器怎么将你编写的源代码转换为可执行程序的,那么本书就是为你而写的!如果你对编译原理很感兴趣,也很愿意阅读编译器的源代码,却苦于代码量庞大,不知从何下手,那么你必将从本书中得到巨大的收获。
对程序员来说,提高编程水平最关键的因素之一就是了解程序的运行时结构,只有了解了自己编写的源代码运行的时候在内存中是什么样的(运行时结构),才能真正写出高质量的代码。编译器是将源代码转化为最终运行时结构的工具,如何实现运行时结构正是本书最重要的一条主线。编译器是一个非常经典的程序,其中包含的很多技术已广泛应用于其他软件(如文字处理软件、数据库、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章都配了相应的视频,建议在看纸质内容之前先看视频。
致谢首先,依然要感谢机械工业出版社华章公司的副总经理温莉芳女士以及其他领导,他们数年来一如既往的支持,是本书能够顺利出版的前提。
其次,特别感谢机械工业出版社华章公司的副总编辑杨福川,他对事业的追求、对工作认真负责的态度以及与作者团队的密切配合,使得本书能够以常规条件下难以置信的速度走上出版流程,与读者见面。
还要感谢机械工业出版社华章公司的版权输出团队和CRC Press的贺瑞君先生,他们的不懈努力、扎实工作和高效沟通,使得本书能够成功版权输出。
最后,感谢我们的家人和朋友,是他们的坚定支持才使得团队能够拒绝方方面面、形形色色的诱惑,放弃普遍追求的短期利益,踏踏实实地做一点实在、深入的工作。这是本书的基础。
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网