自制编译器
34推荐 收藏
32.1K阅读
图灵程序设计丛书

自制编译器

青木 峰郎 (作者) 严圣逸 , 绝云 (译者)
上市销售
请至“随书下载”下载本书试读样章和相关资料。
本书将带领读者从头开始制作一门语言的编译器。笔者特意为本书设计了C♭语言,C♭可以说是C语言的子集,实现了包括指针运算等在内的C语言的主要部分。本书所实现的编译器就是C♭语言的编译器, 是实实在在的编译器,而非有诸多限制的玩具。另外,除编译器之外,本书对以编译器为中心的编程语言的运行环境,即编译器、汇编器、链接器、硬件、运行时环境等都有所提及,介绍了程序运行的所有环节。

夏至,珍惜最长一天

优惠码中输入“北半球”,订单满24-12。 输入“南半球”,你猜? 每张限用1次,6月25日过期。本活动第三方授权电子书不参与。

电子书
¥49.99
格式
mobi   pdf

纸质版定价
¥99.00

出版信息

  • 书  名自制编译器
  • 系列书名图灵程序设计丛书
  • 执行编辑关于本书的内容有任何问题,请联系 杜晓静
  • 出版日期2016-06-07
  • 书  号978-7-115-42218-7
  • 定  价99.00 元
  • 页  数472
  • 印刷方式黑白
  • 开  本16开
  • 出版状态上市销售
  • 原书名ふつうのコンパイラをつくろう
  • 原书号978-4797337952

同系列书

  • HTTP权威指南

    David Gourley   Brian Totty   Marjorie Sayer   Sailu Reddy   Anshu Aggarwal   陈涓   赵振平   译

    本书是HTTP及其相关核心Web技术方面的权威著作,主要介绍了Web应用程序是如何工作的,核心的因特网协议如何...

  • 计算机科学的基础

    本书全面而详细地阐述了计算机科学的理论基础,从抽象概念的机械化到各种数据模型的建立,用算法、数据抽象等核心思想...

  • JavaScript高级程序设计(第3版)

    Nicholas C.Zakas   李松峰   曹力   译

    本书是JavaScript超级畅销书的最新版。ECMAScript 5 和HTML5在标准之争中双双胜出,使大...

  • Java技术手册(第6版)

    Benjamin J Evans   David Flanagan   安道   译

    通过学习本书,你将能够: 掌握最新的语言细节,包括Java 8的变化 使用基本的Java句法学习面向对...

  • 机器学习实战

    Peter Harrington   李锐   李鹏   曲亚东   王斌   译

    机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或...

本书特色

从零开始制作真正的编译器。
贯穿编译、汇编、链接、加载的全过程!
比“龙书”更具实践性!

★实战
通过实际动手制作一个精简版C语言编译器,让读者深入了解C语言程序编译、运行背后的细节。
★全面
不仅限于编译器,对以编译器为中心的编程语言的运行环境,即编译器、汇编器、链接器、硬件以及运行时环境等,均有所涉及。
★权威
日本知名技术书作家青木峰郎耗时3年精心打造,通过具体的例子讲解概念,通俗易懂,更适合入门。

目录

版权声明 阅读
译者序 阅读
说明 阅读
前言 阅读
第 1 章 开始制作编译器 阅读
第 2 章 C♭ 和 cbc 阅读
第 1 部分 代码分析
第 3 章 语法分析的概要
第 4 章 词法分析
第 5 章 基于 JavaCC 的解析器的描述
第 6 章 语法分析
第 2 部分 抽象语法树和中间代码
第 7 章 JavaCC 的 action 和抽象语法树
第 8 章 抽象语法树的生成
第 9 章 语义分析(1)引用的消解
第 10 章 语义分析(2)静态类型检查
第 11 章 中间代码的转换
第 3 部分 汇编代码
第 12 章 x86 架构的概要
第 13 章 x86 汇编器编程
第 14 章 函数和变量
第 15 章 编译表达式和语句
第 16 章 分配栈帧
第 17 章 优化的方法
第 4 部分 链接和加载
第 18 章 生成目标文件
第 19 章 链接和库
第 20 章 加载程序
第 21 章 生成地址无关代码
第 22 章 扩展阅读
附录

作者介绍

青木峰郎(作者)
程序员,著有《Ruby程序设计268技(第2版)》《Ruby源代码完全解说》《Linux程序设计》等多部编程相关著作。并积极参与标准库维护、文档维护等各种各样的活动。

严圣逸(译者)
毕业于上海交通大学。8年软件开发经验,期间赴日本工作。现就职于想能信息科技(上海)有限公司,从事基于云平台的客户关系管理及各类营销自动化系统的开发工作。译有《高效团队开发:工具与方法》。

绝云(译者)
毕业于清华大学软件学院。曾在日本创意公司KAYAC从事即时通讯软件及社交游戏的开发工作,现任蚂蚁金服前端架构专家。译有《图解简单算法》等图书,曾参与《像外行一样思考,像专家一样实践(修订版)》的审校。

相关文章

  • 32位ubuntu16.04运行cbc 报下面的错(PS:已经按照书上的方法./install了cbc)
    安装后的信息如下:
    root@yangjun-virtual-machine:/home/yangjun/cbc-1.0# ./install.sh
    prefix=/usr/local/cbc
    mkdir -p /usr/local/cbc/bin
    install -m755 bin/cbc /usr/local/cbc/bin
    mkdir -p /usr/local/cbc/lib
    cp lib/cbc.jar lib/libcbc.a /usr/local/cbc/lib
    rm -rf /usr/local/cbc/import
    cp -r import /usr/local/cbc/import
    cbc successfully installed as /usr/local/cbc/bin/cbc
    可以看到提示cbc successfully installed as /usr/local/cbc/bin/cbc

    接下来按书1.3节提示进行build,情况如下:
    root@yangjun-virtual-machine:/home/yangjun/cbc-1.0# cbc hello.cb
    程序“cbc”尚未安装。 您可以使用以下命令安装:
    apt install coinor-cbc

    为何又提示cbc未安装?如何解决该问题?请指教
    codeyangjun  发表于 2016-08-13 16:11:40
    推荐
    • 可能是 /usr/local/cbc/bin/ 这个路径没有加入bash的搜索路径里,你可以试试把这句代码放到 ~/.bash_profile 文件里: export PATH="/usr/local/cbc/bin/:$PATH"

      另外,如果用64位的环境,可以考虑用这个项目中编译好的docker镜像:
      https://github.com/leungwensen/cbc-ubuntu-64bit

      绝云  发表于 2016-08-14 12:51:17
    • 谢谢作者回复,已按提示解决问题,谢谢

      codeyangjun  发表于 2016-08-15 11:56:43
  • 32位ubuntu运行cbc 报下面的错(PS:已经按照书上的方法./install了cbc)
    /usr/bin/ld: cannot find /usr/lib/crt1.o: No such file or directory
    /usr/bin/ld: cannot find /usr/lib/crti.o: No such file or directory
    cbc: error: /usr/bin/ld failed. (status 1)
    cbc: error: compile error
    jamesliu  发表于 2016-06-15 17:16:54
    推荐
    • 它提示找不到crt1.o和crti.o, 用find命令找到这两个文件所在的目录, 把它们copy到/usr/lib下面应该就好啦
      $ find /usr/ -name crit*

      cyzz  发表于 2016-06-17 16:27:39
    • Ubuntu 16.04 32位
      sudo cp /usr/lib/i386-linux-gnu/crt* /usr/lib/

      JIESOUL  发表于 2016-08-04 11:10:55
  • 还没出来啊?电子版的也没有。。。。
    for(;;)  发表于 2016-06-02 14:18:35
    推荐
    • china-pub 已经预售,电子版要过一两个月吧

      Kai  发表于 2016-06-03 14:48:50
  • 啥时候翻译完成?
    cyberyoung  发表于 2014-11-28 10:36:40
    推荐
    • 这本到明年春天。

      乐馨  发表于 2014-11-28 10:40:01
    • 把日本不错的图书引进来,这是一个不错的选择

      duanshuaimin  发表于 2015-01-15 13:43:26
  • 这书。。。怎么还是招募译者
    GnailiyLin  发表于 2015-05-16 00:02:14
    推荐
    • 换译者了吧。

      Seachal  发表于 2015-08-18 17:39:07
  • 买原版《ふつうのコンパイラをつくろう》,然后完全看不懂日文......
    lgplgplgplgplgp  发表于 2015-10-26 17:02:32
    推荐
    • 那你为什么买?

      乐馨  发表于 2015-10-27 08:44:58
    • 只能用作收藏了

      lgplgplgplgplgp  发表于 2015-10-27 10:03:48
  • 这个啥时候出版呢?等待在自制cpu之后再自制呢
    在山上  发表于 2015-12-29 14:55:12
    推荐
    • 快啦^-^

      乐馨  发表于 2015-12-30 08:43:02
    • 希望主编把日文自制系列都出了啊,不懂日文

      dcscodelife  发表于 2016-01-14 16:55:35
  • 啥时候才出啊
    杨开地  发表于 2016-05-05 17:00:57
    推荐
    • 马上啦,这个月肯定下印厂!

      杜晓静  发表于 2016-05-05 18:10:45
    • 等了好久。。。>-<

      杨开地  发表于 2016-05-05 19:39:29
  • 问问读过的童鞋,这本需要什么基础吗?
    SUSTCer_章鱼烧  发表于 2016-06-27 14:26:52
    推荐
    • 需要Java和C语言的知识,C语言要求的不多,但是需要一些在Linux上的Java开发的经验。

      刘祺  发表于 2016-07-04 16:10:53
  • cbc hello.cb 这个书中的例子,就提示

    a:~ Andrew$ cbc --help
    readlink: illegal option -- f
    usage: readlink [-n] [file ...]
    错误: 找不到或无法加载主类 net.loveruby.cflat.compiler.Compiler
    a:~ Andrew$

    无解吗😢
    预备程序员_  发表于 2016-09-29 08:48:23
    推荐
    • 你系统的版本?安装的cbc的版本?原书是09年出版的,整个项目是基于32位早期版本centos写的,可能会遇到一些问题。推荐 https://github.com/leungwensen/cbc-ubuntu-64bit 里提到的解决方案,或者看一下随书下载里的文档。

      绝云  发表于 2016-09-29 11:47:46
    • 遇到同样的问题。按照@绝云的方法将git上下载下来后,还是同样的提示信息。。
      要怎么解决?

      ruozhiertong  发表于 2016-12-05 20:40:26
  • 大家好,我是在32位的centos7上安装的cbc
    gcc jre 均安装好
    而且可以看到提示cbc successfully installed as /usr/local/cbc/bin/cbc
    当执行cbc hello.cb的时候出现了找不到hello.s文件,请问是什么问题
    wyx  发表于 2017-01-19 13:33:17
    推荐
    • 可能是编译过程中可执行文件被生成在一个没有权限写入的地方了

      versee  发表于 2017-02-08 23:05:47
  • 我用的是32位的ubuntu,正在看第1章,虽然安装运行成功并跑出来hello world了,
    但是目前还是有一个小疑问,我尝试的操作步骤如下:

    首先我也遇到了评论区提到的安装成功后,
    显示“The program 'cbc' is currently not installed.”的问题,
    于是,去找.bash_profile文件,在命令行输入了:
    $ cd
    $ ls –al .bash_profile

    但是这里显示的消息是:
    ls: cannot access –al: No such file or directory
    .bash_profile

    因此我干脆就在这里新建了一个.空白的bash_profile文件,
    添加了评论区给出的语句到这个文件里,
    export PATH="/usr/local/cbc/bin/:$PATH"

    接着在命令行输入:
    $ source ~/.bash_profile

    最后回到hello.cb文件所在的地方,
    放在桌面了,这才运行成功,
    Desktop$ cbc hello.cb
    Desktop$ ./hello
    Hello, World!

    我做了在线的检索,搜出来的链接都说,每次电脑重启都会自动加载bash文件的,
    可是我这里每次重新打开一个命令行窗口都需要再手动输入source语句,
    $ source ~/.bash_profile 才能让这个.bash_profile文件生效才可以用上cbc命令,
    所以我在想是不是我没有找到“真正”的.bash_profile文件?大家是怎么做的?

    井口裕香  发表于 2017-01-23 01:57:52
    推荐
    • 你去修改 /etc/profile

      versee  发表于 2017-02-08 23:07:23
  • 什么时候会出版?!!蛮喜欢的
    风纪扣v  发表于 2013-12-21 22:59:15
    推荐
  • 图灵搞了很多日本出的自制语言方面的书啊。。。
    lu4nx  发表于 2014-02-28 20:59:46
    推荐
  • 非常期待出版,要是英文的话都想自己翻译了
    Glorevo  发表于 2014-04-16 13:06:05
    推荐