热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

自制编译器

  • 1星
  • 2022-02-10
  • 12.67MB
  • 需要1积分
  • 9次下载
标签: 编译器

编译器

本书将带领读者从头开始制作一门语言的编译器。笔者特意为本书设计了CЬ语言,CЬ可以说是C语言的子集,实现了包括指针运算等在内的C语言的主要部分。本书所实现的编译器就是C  Ь语言的编译器,  是实实在在的编译器,而非有诸多限制的玩具。另外,除编译器之外,本书对以编译器为中心的编程语言的运行环境,即编译器、汇编器、链接器、硬件、运行时环境等都有所提及,介绍了程序运行的所有环节。

自制编译器  目录

第1章 开始制作编译器  1

第2章 CЬ和cbc  13

第1部分 代码分析

第3章 语法分析的概要  24

第4章 词法分析  39

第5章 基于JavaCC  的解析器的描述  55

第6章 语法分析  68

第2部分 抽象语法树和中间代码

第7章 JavaCC  的action  和抽象语法树  92

第8章 抽象语法树的生成  110

第9章 语义分析(1)引用的消解  135

第10章 语义分析(2)静态类型检查  159

第11章 中间代码的转换  178

第3部分 汇编代码

第12章 x86  架构的概要  214

第13章 x86  汇编器编程  236

第14章 函数和变量  266

第15章 编译表达式和语句  278

第16章 分配栈帧  308

第17章 优化的方法  333

第4部分 链接和加载

第18章 生成目标文件  346

第19章 链接和库  369

第20章 加载程序  387

第21章 生成地址无关代码  410

第22章 扩展阅读  434

    图书在版编目
(CIP)
数据
(日)
青木峰郎著;
严圣逸,
绝云译
   
自制编译器
/
. --
北京
:
人民邮电出版社
, 2016.6
  
(图灵程序设计丛书)
  ISBN
978-7-115-42218-7
  Ⅰ. ①自… Ⅱ. ①青… ②严… ③绝… Ⅲ
.
C
语言
-编译器-程序设计 Ⅳ. ①
TP312
  中½版本图书馆
CIP
数据核字
(2016)
083048
内  容  提  要
  本书将带领读者从头开始制½一门语言的编译器。
笔者特意为本书设计了
C♭
语言, 可以说是
C♭
C
语言的子集,
实现了包括指针运算等在内的
C
语言的主要部分。
本书所实现的编译器就是
C♭
语言
的编译器,是实实在在的编译器,
而非有诸多限制的玩具。
另外,
除编译器之外,
本书对以编译器为
中心的编程语言的运行环境,
即编译器、
汇编器、
链接器、
硬件、
运行时环境等½有所提及,
介绍了
程序运行的所有环节。
  从单纯对编译器感兴趣的读者到以实用为目的的读者,
½适合阅读本书。
◆ 著    
[日]
青木峰郎
  译    严圣逸 绝云
  责任编辑 乐 馨
  执行编辑 杜晓静
  责任印制 ½志环
◆ 人民邮电出版社出版发行
  北京市丰台区成寿寺路11号
  邮编 100164  电子邮件 315@ptpress.com.cn
  ½址 http://www.ptpress.com.cn
 
北京      印刷
800×1000 1/16
开本:
  印张:
29.5
  字数: 千字
605
  印数:
- 3 000
1
2016
6
月第
1
2016
6
月北京第
1
次印刷
著½权合同登记号 图字:
01-2014-5502
定价:
99.00
读者服务热线:
(010)51095186
½
600 印装质量热线:
(010)81055316
反盗版热线:
(010)81055315
广告经营许可证:
京东工商广字第
8052
译者序
算上这本《自制编译器》
,图灵的“自制”系列应该已经有
6
本了。从
CPU
到操½系统,从
编译器到编程语言,再到搜索引擎等具½的应用,俨然已经可以自制一套完整的计算机½系了。
“自制”系列图书½是从日本引进并翻译出版的,本人也有幸读过其中几本。可½有很多读
者和曾经的我一样对“自制”抱有疑惑:
“在时间就是金钱、时间就是生½的
IT
行业,为什么会
存在这样的自制风½?为什么要自制呢?
CPU
可以用
Intel、AMD,操½系统已经有了 Windows、
Linux,搜索引擎已经有了 Google、Yahoo,编程语言及其对应的编译器、解释器更是已经百花½
放、百家争鸣……”直到翻译完本书,我才逐渐½会到自制是最½的结合实践学习的方式之一。
拿来的始终是别人的,要吃透某项技术、打破技术垄断,最½的方法就是自制。并且从某种程度
上来说,自制也是一种创新,可½下一个
Google
Linux
就孕育在某次自制之中。
自制编译器的目的是了解½前实用的编程语言、编译器和
OS
的相关知识,绝对不½闭门
造½。因此½者½用的
C♭
语言是
C
语言的子集,实现了包括指针运算在内的
C
语言的主要部
分,通过自制一个
C♭
语言的编译器,½够让我们了解
C
语言程序编译、运行背后的细节;
OS
选用
Linux,½够让我们知晓 Linux
上的链接、加½½和程序库;汇编部分采用最常见的
x86
系统
架构。½者自制的编译器
cbc
½够运行在
x86
架构的任½发行版本的
Linux
上,编译
C♭
代码并
生成可执行的
ELF
文件。
½者青木先生在致谢中提到了
Linux
GNU
工具等开源½件的开发者。这也是本书的另
一大特色:充分利用开源½件和工具。从
GCC
GNU Assembler
再到
JavaCC
以及
Linux,并
非每一行代码½是自己写的才算自制,根据自己的设计合理有效地利用开源½件,既可以让我
们更快地看到自制的成果,又½向优秀的开源½件学习。如果要深入学习、研究,那么开源½
件的源代码以及活跃的社区等½是非常有帮助的。而如果把自制的½件也½为开源½件上传到
Github
上供大家½用,并根据其他开发者提出的
Pull Request
不断改进½件,那就更½了。
最后我要由衷地感谢本书的另一½译者绝云老师以及图灵的编辑。还要特别感谢我的外公,
一½毕生耕耘于教育出版行业的老编辑。自己½有幸参加翻译,和从小对出版工½的耳闻目染
是密不可分的。
严圣逸
2016
4
月于上海
前  言
本书有两大特征:第一,实际动手实现了真正的编译器;第二,涉及了以往编译器相关书籍
所不曾涉及的内容。
先说第一点。
本书通篇讲述了“C♭”这种语言的编译器的制½。C♭ 基本上是
C
语言的子集,并实现了包
括指针运算等在内的
C
语言的主要部分。因此可以说,本书实现的是实实在在的编译器,而并
非有诸多限制的玩具。
更具½地说,本书实现的
C♭
编译器是以运行在
x86
系列
CPU
上的
Linux
为平台的。之所
以选择
x86
系列的
CPU,是因为这是最普及的 CPU,相应的硬件非常容易找到。选择 Linux
因为从标准库到程序运行环境的代码½是公开的,只要½有心,完全可以自己分析程序的结构。
可½有些½者不喜欢把话题局限于特定的语言或者
OS,而笔者却恰恰更倾向于在一开始就
对环境进行限定。因为比起一般化的说明,从具½的环境出发,再向一般化扩展的做法要简单、
直观得多。笔者赞成最终把话题往一般化的方向扩展,½并不赞成一开始就一定要做到一般化。
再说第二点。
本书并不局限于书名中的“编译器”
,对以编译器为中心的编程语言的运行环境,即编译
器、汇编器、链接器、硬件、运行时环境½有所涉及。
编译器生成的程序的运行不仅和编译器相关,和汇编器、链接器等½件以及硬件½密切相
关。因此,如果想了解编译器以及程序的运行结果,对上述几部分内容的了解½然是必不可少
的。不过这里的“½然”现在看起来也逐渐变得没那么绝对了。
只讲编译器或者只讲汇编语言的书已经多得烂大街了,只讲链接器的书也有一些,½是贯
穿上述所有内容的书至今还没有。写编译器的书,一涉及具½的汇编语言,就会注上“请参考
其他书籍”
;写汇编语言的书,对于
OS
的运行环境问题却只字不提;写链接器的书,如果读者
不了解编译器等相关知识,也就只½被束之高阁了。
难道就不可½完整地记述编程语言的运行环境吗?笔者认为是可½的。只要专注于具½的
语言、具½的
OS
以及具½的硬件,就可以对程序运行的所有环节进行说明了。基于这样的想
法,笔者进行了稍显鲁½的尝试,并最终写成了本书。
以上就是本书的基本原则。下面是本书的读者对象。
展开预览

猜您喜欢

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×