数据结构论坛

首页 » 分类 » 分类 » 做程序员,这门功课逃得了初一逃不过十五
TUhjnbcbe - 2021/7/16 13:27:00

题图:Pixabay

说到计算机专业的必修课,想必大家立马就能想到不少,比如计算机组成原理、计算理论、数学(线性代数/概率统计/离散数学等)、网络基础、数据结构与算法、编程语言(Java、C等)、操作系统......

今天,我们不说上面这些,说下编译原理。

曾几何时,有多少小伙伴的编译原理课程是周公陪着度过的?又有多少小伙伴为了编译原理课程考试而头疼不已?那时候的我们曾抱怨,如此枯燥的课程要是作为选修课多好!后来,我们终于战战兢兢地勉强及格,挥别大学。毕业那天想到终于可以逃离那些枯燥乏味的知识和考试,当一名洒脱自如的程序员,我们笑得很灿烂——谁能料到,毕业几年之后,当我们想成长为一名更为出色的程序员,我们终于知道,有些知识,是逃得了初一却逃不过十五的,比如编译原理。

为什么学习编译原理逃不过十五?

当我们翻越大大小小的Bug,当我们开始了解架构设计,当我们羡慕手起Bug落的大神,我们才发现,学习编译原理的意义更多在于追寻程序设计语言的本质,而这类地基性的知识在任何一位程序员的快速成长过程中都具有神奇的力量。当我们真正掌握编译原理以后,我们会对自己写的程序、程序语言有更深的本质认识,这种认识会让我们与众不同:别人看到的是语法,我们看到的是背后的实现。

有没有想起大话西游中的经典台词:

“曾經有一堂真摯的課程擺在我面前,我沒有珍惜,等到失去的時候才後悔莫及,塵世間最痛苦的事莫過於此。如果能夠給我一個再來一次的機會...”

等一下

眼下就有一本让你再来一次的参考书

?

国外关于编译技术有三本比较有来头的书:“龙书”、“鲸书”和“虎书”。这三本书都能把编译技术讲透彻,但使用不同的语言来实现。“虎书”使用的是更适合广大读者的C语言,而另外两本书分别采用ML和Java。

“虎书”中文版早在年就在图灵出版,后来慢慢停止销售。今天,非常荣幸地告诉大家,虎书修订版——《现代编译原理:C语言描述(修订版)》已上架!

修订版:有些书停止销售之后就消失在茫茫书海,你再也不见它的踪影,绝版了!有的书停止销售之后还会被读者反复提及,如果呼声很高,这本书很可能会被复活。在图灵,修订版通常是被复活的图书,它们自带粉丝,是读者难以忘怀的经典。

AndrwW.Appl,MaiaGinsburg著赵克佳,黄春,沈志宇译

¥89.00元

国际上众多名校采用的编译原理课程教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。

§本书内容

“虎书”全面讲述现代编译器的各个组成部分,包括词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。

全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、存储结构优化等,适合于后续课程或研究生教学。

§两大特色

{一}

编译器的设计与实现是一种实践性很强的工程。作为讲述编译器实现方法的编译原理课程,既需要讲述理论和原理,也离不开具体的实践。

本书的章节按照编译器处理过程的各个阶段依次组织,并精心设计了一个“学生项目编译器”的框架和模块接口。每一章结尾给出了与该编译器一个模块对应的编译器项目实现的习题,使得学生在掌握了编译原理和方法的同时,能够理论联系实际地亲自动手体验具体的实现过程,并逐步实现一个编译器。

它弥补了目前一些编译原理教科书在实践方面的不足。这是本书的特点之一。

{二}

本书的另一个特点是增加了一些其他编译原理教科书没有涉及的内容。前端增加了面向对象的程序设计语言、函数式程序设计语言等现代语言的编译实现方法,后端增加了针对现代计算机体系结构特征的一些比较成熟的优化方法。这部分内容展现了现代商业编译器需解决的一些关键问题,开拓了学生的视野,为学生未来进行更深入的研究奠定了基础。

§章节联系

§具体章节

目录

第一部分 编译基本原理

第1章 绪论

1.1 模块与接口 

1.2 工具和软件

1.3 树语言的数据结构

程序设计:直线式程序解释器

推荐阅读

习题

第2章 词法分析

2.1 词法单词

2.2 正则表达式

2.3 有限自动机

2.4 非确定有限自动机

2.5 Lx:词法分析器的生成器

程序设计:词法分析

推荐阅读

习题

第3章 语法分析

3.1 上下文无关文法

3.2 预测分析

3.3 LR分析

3.4 使用分析器的生成器

3.5 错误恢复

程序设计:语法分析

推荐阅读

习题

第4章 抽象语法

4.1 语义动作

4.2 抽象语法分析树

程序设计:抽象语法

推荐阅读

习题

第5章 语义分析

5.1 符号表

5.2 Tigr编译器的绑定

5.3 表达式的类型检查

5.4 声明的类型检查

程序设计:类型检查

习题

第6章 活动记录

6.1 栈帧

6.2 Tigr编译器的栈帧

程序设计:栈帧

推荐阅读

习题

第7章 翻译成中间代码

7.1 中间表示树

7.2 翻译为树中间语言

7.3 声明

程序设计:翻译成树

习题

第8章 基本块和轨迹

8.1 规范树

8.2 处理条件分支

推荐阅读

习题

第9章 指令选择

9.1 指令选择算法

9.2 CISC机器

9.3 Tigr编译器的指令选择

程序设计:指令选择

推荐阅读

习题

第10章 活跃分析

10.1 数据流方程的解

10.2 Tigr编译器的活跃分析

程序设计:构造流图

程序设计:活跃分析模块

习题

第11章 寄存器分配

11.1 通过简化进行着色

11.2 合并

11.3 预着色的结点

11.4 图着色的实现

11.5 针对树的寄存器分配

程序设计:图着色

推荐阅读

习题

第12章 整合为一体

程序设计:过程入口/出口

程序设计:创建一个可运行的编译器

第二部分 高级主题

第13章 垃圾收集

13.1 标记-清扫式收集

13.2 引用计数

13.3 复制式收集

13.4 分代收集

13.5 增量式收集

13.6 Bakr算法

13.7 编译器接口

程序设计:描述字

程序设计:垃圾收集

推荐阅读

习题

第14章 面向对象的语言

14.1 类

14.2 数据域的单继承性

14.3 多继承

14.4 测试类成员关系

14.5 私有域和私有方法

14.6 无类语言

14.7 面向对象程序的优化

程序设计:Objct-Tigr

推荐阅读

习题

第15章 函数式程序设计语言

15.1 一个简单的函数式语言

15.2 闭包

15.3 不变的变量

15.4 内联扩展

15.5 闭包变换

15.6 高效的尾递归

15.7 懒惰计算

推荐阅读

程序设计:编译函数式语言

习题

第16章 多态类型

16.1 参数多态性

16.2 类型推论

16.3 多态变量的表示

16.4 静态重载的解决方法

推荐阅读

习题

第17章 数据流分析

17.1 流分析使用的中间表示

17.2 各种数据流分析

17.3 使用数据流分析结果的几种转换

17.4 加快数据流分析

17.5 别名分析

推荐阅读

习题

第18章 循环优化

18.1 必经结点

18.2 循环不变量计算

18.3 归纳变量

18.4 数组边界检查

18.5 循环展开

推荐阅读

习题

第19章 静态单赋值形式

19.1 转化为SSA形式

19.2 必经结点树的高效计算

19.3 使用SSA的优化算法

19.4 数组、指针和存储器

19.5 控制依赖图

19.6 从SSA形式转变回来

19.7 函数式中间形式

推荐阅读

习题

第20章 流水和调度

20.1 没有资源约束时的循环调度

20.2 有资源约束的循环流水

20.3 分支预测

推荐阅读

习题

第21章 存储层次

21.1 cach的组织结构

21.2 cach块对齐

21.3 预取

21.4 循环交换

21.5 分块

21.6 垃圾收集和存储层次

推荐阅读

习题

附录 Tigr语言参考手册

参考文献

索引

扫一扫,京东购

扫一扫,当当购

扫一扫,亚马逊购

赠书来了

说说编译原理方面让你抓耳挠腮的大坑......你上学时最喜欢的基础课是什么?当年哪些基础课让你痛苦不堪,如今却又受益匪浅?

留言分享一下吧,精选3位小伙伴送出《现代编译原理:C语言描述(修订版)》,截止年5月11日。

?更多C语言图书

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 做程序员,这门功课逃得了初一逃不过十五