编译原理:原理、技术与工具

编译原理:原理、技术与工具
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] ,
2009-01
版次: 2
ISBN: 9787111251217
定价: 89.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 631页
正文语种: 简体中文
原版书名: Compilers: Principle, Techniques and Tools, Second Edition
1550人买过
  •   本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面修订,涵盖了编译器开发方面最新进展。每章中都提供了大量的实例及参考文献。
      本书是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。   AlfredV.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。著有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的著作。 出版者的话
    译者序
    前言
    第1章 引论
    1.1语言处理器
    1.2一个编译器的结构
    1.2.1词法分析
    1.2.2语法分析
    1.2.3语义分析
    1.2.4中间代码生成
    1.2.5代码优化
    1.2.6代码生成
    1.2.7符号表管理
    1.2.8将多个步骤组合成趟
    1.2.9编译器构造工具
    1.3程序设计语言的发展历程
    1.3.1走向高级程序设计语言
    1.3.2对编译器的影响
    1.3.31.3节的练习
    1.4构建一个编译器的相关科学
    1.4.1编译器设计和实现中的建模
    1.4.2代码优化的科学
    1.5编译技术的应用
    1.5.1高级程序设计语言的实现
    1.5.2针对计算机体系结构的优化
    1.5.3新计算机体系结构的设计
    1.5.4程序翻译
    1.5.5软件生产率工具
    1.6程序设计语言基础
    1.6.1静态和动态的区别
    1.6.2环境与状态
    1.6.3静态作用域和块结构
    1.6.4显式访问控制
    1.6.5动态作用域
    1.6.6参数传递机制
    1.6.7别名
    1.6.81.6节的练习
    1.7第1章的总结
    1.8第1章的参考书目
    第2章一个简单的语法制导翻译器
    2.1引言
    2.2语法定义
    2.2.1文法定义
    2.2.2推导
    2.2.3语法分析树
    2.2.4二义性
    2.2.5运算符的结合性
    2.2.6运算符的优先级
    2.2.72.2节的练习
    2.3语法制导翻译
    2.3.1后缀表示
    2.3.2综合属性
    2.3.3简单语法制导定义
    2.3.4树的遍历
    2.3.5翻译方案
    2.3.62.3节的练习
    2.4语法分析
    2.4.1自顶向下分析方法
    2.4.2预测分析法
    2.4.3何时使用产生式
    2.4.4设计一个预测语法分析器
    2.4.5左递归
    2.4.62.4节的练习
    2.5简单表达式的翻译器
    2.5.1抽象语法和具体语法
    2.5.2调整翻译方案
    2.5.3非终结符号的过程
    2.5.4翻译器的简化
    2.5.5完整的程序
    2.6词法分析
    2.6.1剔除空白和注释
    2.6.2预读
    2.6.3常量
    2.6.4识别关键字和标识符
    2.6.5词法分析器
    2.6.62.6节的练习
    2.7符号表
    2.7.1为每个作用域设置一个符号表
    2.7.2符号表的使用
    2.8中间代码生成
    2.8.1两种中间表示形式
    2.8.2语法树的构造
    2.8.4三地址码
    2.8.52.8节的练习
    2.9第2章的总结
    第3章词法分析
    3.1词法分析器的作用
    3.1.1词法分析及解析
    3.1.2词法单元、模式、词素
    3.1.3词法单元的属性
    3.1.4词法错误
    3.1.53.1节的练习
    3.2输入缓冲
    3.2.1缓冲区对
    3.2.2哨兵标记
    3.3词法单元的规约
    3.3.1串和语言
    3.3.2语言上的运算
    3.3.3正则表达式
    3.3.4正则定义
    3.3.5正则表达式的扩展
    3.3.63.3节的练习
    3.4词法单元的识别
    3.4.1状态转换图
    3.4.2保留字和标识符的识别
    3.4.3完成我们的连续性例子
    3.4.4基于状态转换图的词法分析器的体系结构
    3.4.53.4节的练习
    3.5词法分析器生成工具Lex
    3.5.1Lex的使用
    3.5.2Lex程序的结构
    3.5.3Lex中的冲突解决
    3.5.4向前看运算符
    3.5.53.5节练习
    3.6有穷自动机
    3.6.1不确定的有穷自动机
    3.6.2转换表
    3.6.3NFA接受输入字符串
    3.6.4确定的有穷自动机
    3.6.53.6节的练习
    3.7从正则表达式到自动机
    3.7.1从NFA到DFA的转换
    3.7.2NFA的模拟
    3.7.3NFA模拟效率
    3.7.4从正则表达式构造NFA
    3.7.5字符串处理算法的效率
    3.7.63.7节的练习
    3.8词法分析器生成工具的设计
    3.8.1被生成的词法分析器的结构
    3.8.2基于NFA的模式匹配
    3.8.3词法分析器使用的DFA
    3.8.4实现向前看运算符
    3.8.53.8的练习
    3.9基于DFA的模式匹配器的优化
    3.9.1NFA的重要状态
    3.9.2根据抽象语法树计算得到的函数
    3.9.3计算nullable、firstpos及lastpos
    3.9.4计算followpos
    3.9.5根据正则表达式构建DFA
    3.9.6最小化一个DFA的状态数
    3.9.7词法分析器的状态最小化
    3.9.8在DFA模拟中用时间换取空间
    3.9.93.9节的练习
    3.9.10第3章的总结
    3.11第3章参考文献
    第4章语法分析
    4.1引论
    4.1.1语法分析器的角色
    4.1.2代表性的文法
    4.1.3语法错误的处理
    4.1.4错误恢复策略
    4.2上下文无关文法
    4.2.1上下文无关文法的正式定义
    4.2.2符号表示的惯例
     4.2.3推导
    4.2.4语法分析树和推导
     4.2.5二义性
    4.2.6验证文法生成的语言
    4.2.7上下文无关文法和正则表达式
    4.2.84.2节的练习
    4.3设计文法
    4.3.1词法分析和语法分析
    4.3.2消除二义性
    4.3.3左递归的消除
    4.3.4提取左公因子
    4.3.5非上下文无关的语言构造
    4.3.64.3节的练习
    4.4自顶向下的语法分析
    4.4.1递归下降的语法分析
    4.4.2FIRST和FOLLOW
    4.4.3LL(1)文法
    4.4.4非递归的预测分析
    4.4.5预测分析中的错误恢复
    4.4.64.4节的练习
    4.5自底向上的语法分析
    4.5.1归约
    4.5.2句柄剪枝
    4.5.3移入-归约语法分析技术
    4.5.4移入-归约语法分析中的冲突
    4.5.54.5节的练习
    4.6LR语法分析技术介绍:简单LR技术
    4.6.1为什么使用LR语法分析器?
    4.6.2项和LR(0)自动机
    4.6.3LR-语法分析算法
    4.6.4构造SLR-分析表
    4.6.5可行前缀
    4.6.64.6节的练习
    4.7更强大的LR语法分析器
    4.7.1规范LR(1)项
    4.7.2构造LR(1)项集
    4.7.3规范LR(1)分析表
    4.7.4构造LALR语法分析表
    4.7.5LALR语法分析表的高效构造方法
    4.7.6LR语法分析表的压缩
    4.7.74.7节的练习
    4.8使用二义性文法
    4.8.1用优先级和结合性解决冲突
    4.8.2“悬空-else”二义性
    4.8.3LR语法分析中的错误恢复
    4.8.44.8节的练习
    4.9语法分析器的生成工具
    4.9.1语法分析器的生成工具Yacc
    4.9.2使用Yacc处理二义性文法
    4.9.3用Lex创建Yacc的词法分析器
    4.9.4Yacc中的错误恢复
    4.9.54.9节的练习
    4.10:第4章的小结
    4.11第4章的参考文献
    第5章语法制导的翻译
    5.1语法制导定义
    5.1.1继承属性和综合属性
    5.1.2在一棵语法分析树的结点上对一个SDD求值
    5.1.35.1节的练习
    5.2SDD的求值顺序
    5.2.1依赖图
    5.2.2属性求值的顺序
    5.2.3S-属性定义
    5.2.4L-属性定义
    5.2.5具有受控副作用的语义规则
    5.2.65.2节的练习
    5.3语法制导翻译的应用
    5.3.1抽象语法树的构造
    5.3.2类型的结构
    5.3.35.3节的练习
    5.4语法制导的翻译方案
    5.4.1后缀翻译方案
    5.4.2后缀SDT的语法分析栈实现
    5.4.3产生式内部带有语义动作的SDT
    5.4.4从SDT中消除左递归
    5.4.5L-属性定义的SDT
    5.4.65.4节的练习
    5.5实现L-属性的SDD
    5.5.1在递归下降语法分析过程中进行翻译
    5.5.2边扫描边生成代码
    5.5.3L-属性的SDD和LL语法分析
    5.5.4L-属性的SDD的自底向上语法分析
    5.5.55.5节的练习
    5.6第5章的总结
    5.7第5章的参考文献
    第6章中间代码生成
    第7章运行时刻环境
    第7章总结
    第8章代码生成
    第9章机器无关优化
    第10章指令级并行
    第11章并行性和局部性的优化
    第12章过程间分析
  • 内容简介:
      本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面修订,涵盖了编译器开发方面最新进展。每章中都提供了大量的实例及参考文献。
      本书是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。
  • 作者简介:
      AlfredV.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。著有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的著作。
  • 目录:
    出版者的话
    译者序
    前言
    第1章 引论
    1.1语言处理器
    1.2一个编译器的结构
    1.2.1词法分析
    1.2.2语法分析
    1.2.3语义分析
    1.2.4中间代码生成
    1.2.5代码优化
    1.2.6代码生成
    1.2.7符号表管理
    1.2.8将多个步骤组合成趟
    1.2.9编译器构造工具
    1.3程序设计语言的发展历程
    1.3.1走向高级程序设计语言
    1.3.2对编译器的影响
    1.3.31.3节的练习
    1.4构建一个编译器的相关科学
    1.4.1编译器设计和实现中的建模
    1.4.2代码优化的科学
    1.5编译技术的应用
    1.5.1高级程序设计语言的实现
    1.5.2针对计算机体系结构的优化
    1.5.3新计算机体系结构的设计
    1.5.4程序翻译
    1.5.5软件生产率工具
    1.6程序设计语言基础
    1.6.1静态和动态的区别
    1.6.2环境与状态
    1.6.3静态作用域和块结构
    1.6.4显式访问控制
    1.6.5动态作用域
    1.6.6参数传递机制
    1.6.7别名
    1.6.81.6节的练习
    1.7第1章的总结
    1.8第1章的参考书目
    第2章一个简单的语法制导翻译器
    2.1引言
    2.2语法定义
    2.2.1文法定义
    2.2.2推导
    2.2.3语法分析树
    2.2.4二义性
    2.2.5运算符的结合性
    2.2.6运算符的优先级
    2.2.72.2节的练习
    2.3语法制导翻译
    2.3.1后缀表示
    2.3.2综合属性
    2.3.3简单语法制导定义
    2.3.4树的遍历
    2.3.5翻译方案
    2.3.62.3节的练习
    2.4语法分析
    2.4.1自顶向下分析方法
    2.4.2预测分析法
    2.4.3何时使用产生式
    2.4.4设计一个预测语法分析器
    2.4.5左递归
    2.4.62.4节的练习
    2.5简单表达式的翻译器
    2.5.1抽象语法和具体语法
    2.5.2调整翻译方案
    2.5.3非终结符号的过程
    2.5.4翻译器的简化
    2.5.5完整的程序
    2.6词法分析
    2.6.1剔除空白和注释
    2.6.2预读
    2.6.3常量
    2.6.4识别关键字和标识符
    2.6.5词法分析器
    2.6.62.6节的练习
    2.7符号表
    2.7.1为每个作用域设置一个符号表
    2.7.2符号表的使用
    2.8中间代码生成
    2.8.1两种中间表示形式
    2.8.2语法树的构造
    2.8.4三地址码
    2.8.52.8节的练习
    2.9第2章的总结
    第3章词法分析
    3.1词法分析器的作用
    3.1.1词法分析及解析
    3.1.2词法单元、模式、词素
    3.1.3词法单元的属性
    3.1.4词法错误
    3.1.53.1节的练习
    3.2输入缓冲
    3.2.1缓冲区对
    3.2.2哨兵标记
    3.3词法单元的规约
    3.3.1串和语言
    3.3.2语言上的运算
    3.3.3正则表达式
    3.3.4正则定义
    3.3.5正则表达式的扩展
    3.3.63.3节的练习
    3.4词法单元的识别
    3.4.1状态转换图
    3.4.2保留字和标识符的识别
    3.4.3完成我们的连续性例子
    3.4.4基于状态转换图的词法分析器的体系结构
    3.4.53.4节的练习
    3.5词法分析器生成工具Lex
    3.5.1Lex的使用
    3.5.2Lex程序的结构
    3.5.3Lex中的冲突解决
    3.5.4向前看运算符
    3.5.53.5节练习
    3.6有穷自动机
    3.6.1不确定的有穷自动机
    3.6.2转换表
    3.6.3NFA接受输入字符串
    3.6.4确定的有穷自动机
    3.6.53.6节的练习
    3.7从正则表达式到自动机
    3.7.1从NFA到DFA的转换
    3.7.2NFA的模拟
    3.7.3NFA模拟效率
    3.7.4从正则表达式构造NFA
    3.7.5字符串处理算法的效率
    3.7.63.7节的练习
    3.8词法分析器生成工具的设计
    3.8.1被生成的词法分析器的结构
    3.8.2基于NFA的模式匹配
    3.8.3词法分析器使用的DFA
    3.8.4实现向前看运算符
    3.8.53.8的练习
    3.9基于DFA的模式匹配器的优化
    3.9.1NFA的重要状态
    3.9.2根据抽象语法树计算得到的函数
    3.9.3计算nullable、firstpos及lastpos
    3.9.4计算followpos
    3.9.5根据正则表达式构建DFA
    3.9.6最小化一个DFA的状态数
    3.9.7词法分析器的状态最小化
    3.9.8在DFA模拟中用时间换取空间
    3.9.93.9节的练习
    3.9.10第3章的总结
    3.11第3章参考文献
    第4章语法分析
    4.1引论
    4.1.1语法分析器的角色
    4.1.2代表性的文法
    4.1.3语法错误的处理
    4.1.4错误恢复策略
    4.2上下文无关文法
    4.2.1上下文无关文法的正式定义
    4.2.2符号表示的惯例
     4.2.3推导
    4.2.4语法分析树和推导
     4.2.5二义性
    4.2.6验证文法生成的语言
    4.2.7上下文无关文法和正则表达式
    4.2.84.2节的练习
    4.3设计文法
    4.3.1词法分析和语法分析
    4.3.2消除二义性
    4.3.3左递归的消除
    4.3.4提取左公因子
    4.3.5非上下文无关的语言构造
    4.3.64.3节的练习
    4.4自顶向下的语法分析
    4.4.1递归下降的语法分析
    4.4.2FIRST和FOLLOW
    4.4.3LL(1)文法
    4.4.4非递归的预测分析
    4.4.5预测分析中的错误恢复
    4.4.64.4节的练习
    4.5自底向上的语法分析
    4.5.1归约
    4.5.2句柄剪枝
    4.5.3移入-归约语法分析技术
    4.5.4移入-归约语法分析中的冲突
    4.5.54.5节的练习
    4.6LR语法分析技术介绍:简单LR技术
    4.6.1为什么使用LR语法分析器?
    4.6.2项和LR(0)自动机
    4.6.3LR-语法分析算法
    4.6.4构造SLR-分析表
    4.6.5可行前缀
    4.6.64.6节的练习
    4.7更强大的LR语法分析器
    4.7.1规范LR(1)项
    4.7.2构造LR(1)项集
    4.7.3规范LR(1)分析表
    4.7.4构造LALR语法分析表
    4.7.5LALR语法分析表的高效构造方法
    4.7.6LR语法分析表的压缩
    4.7.74.7节的练习
    4.8使用二义性文法
    4.8.1用优先级和结合性解决冲突
    4.8.2“悬空-else”二义性
    4.8.3LR语法分析中的错误恢复
    4.8.44.8节的练习
    4.9语法分析器的生成工具
    4.9.1语法分析器的生成工具Yacc
    4.9.2使用Yacc处理二义性文法
    4.9.3用Lex创建Yacc的词法分析器
    4.9.4Yacc中的错误恢复
    4.9.54.9节的练习
    4.10:第4章的小结
    4.11第4章的参考文献
    第5章语法制导的翻译
    5.1语法制导定义
    5.1.1继承属性和综合属性
    5.1.2在一棵语法分析树的结点上对一个SDD求值
    5.1.35.1节的练习
    5.2SDD的求值顺序
    5.2.1依赖图
    5.2.2属性求值的顺序
    5.2.3S-属性定义
    5.2.4L-属性定义
    5.2.5具有受控副作用的语义规则
    5.2.65.2节的练习
    5.3语法制导翻译的应用
    5.3.1抽象语法树的构造
    5.3.2类型的结构
    5.3.35.3节的练习
    5.4语法制导的翻译方案
    5.4.1后缀翻译方案
    5.4.2后缀SDT的语法分析栈实现
    5.4.3产生式内部带有语义动作的SDT
    5.4.4从SDT中消除左递归
    5.4.5L-属性定义的SDT
    5.4.65.4节的练习
    5.5实现L-属性的SDD
    5.5.1在递归下降语法分析过程中进行翻译
    5.5.2边扫描边生成代码
    5.5.3L-属性的SDD和LL语法分析
    5.5.4L-属性的SDD的自底向上语法分析
    5.5.55.5节的练习
    5.6第5章的总结
    5.7第5章的参考文献
    第6章中间代码生成
    第7章运行时刻环境
    第7章总结
    第8章代码生成
    第9章机器无关优化
    第10章指令级并行
    第11章并行性和局部性的优化
    第12章过程间分析
查看详情
系列丛书 / 更多
编译原理:原理、技术与工具
Java编程思想(第4版)
[美]Bruce Eckel 著;陈昊鹏 译
编译原理:原理、技术与工具
数据挖掘:概念与技术(原书第3版)
[美]Jiawei、[美]Micheling、[美]Jian Pei 著;范明、孟小峰 译
编译原理:原理、技术与工具
算法导论(原书第3版)
[美]Thomas、[美]Charles、[美]Ronald、[美]Clifford Stein 著;殷建平、徐云、王刚 译
编译原理:原理、技术与工具
数据结构与算法分析:Java语言描述
[美]马克·艾伦·维斯 著;陈越 译
编译原理:原理、技术与工具
C程序设计语言(第2版·新版) 习题解答
吉米拜尔 著;杨涛 译;[美]汤朵
编译原理:原理、技术与工具
C程序设计语言(第二版)
[美]Brian(布莱恩·克尼汉)、[美]Dennis M.Ritchie(丹尼斯·里奇) 著;徐宝文、李志 译
编译原理:原理、技术与工具
深入理解计算机系统(原书第3版)
[美]兰德尔 E.布莱恩特(Randal E.·Bryant) 著;龚奕利、贺莲 译
编译原理:原理、技术与工具
计算机科学丛书·云计算:概念、技术与架构
[美]Thomas、[英]Zaigham、[巴西]Ricardo Puttini 著;龚奕利、贺莲、胡创 译
编译原理:原理、技术与工具
计算机科学导论:原书第3版
[美]Behrouz Forouzan 著;刘艺 译
编译原理:原理、技术与工具
数据库系统概念:(原书第6版)
[美]Abraham、Henry、S.Sudarshan 著;杨冬青、李红燕、唐世渭 译
编译原理:原理、技术与工具
需求分析与系统设计
[澳]麦斯阿塞克 著;马素霞 译
编译原理:原理、技术与工具
软件工程:实践者的研究方法(原书第8版 本科教学版)
[美]罗杰 S. 普莱斯曼 著;郑人杰、马素霞 译
相关图书 / 更多
编译原理:原理、技术与工具
编译原理与实践
鲁斌
编译原理:原理、技术与工具
编译器设计原理
谌志群 著
编译原理:原理、技术与工具
编译方法导论
史涯晴 贺汛
编译原理:原理、技术与工具
编译原理及编译程序构造(第3版)/普通高校计算机专业精品教材系列
云挺、秦振松、薛联凤 著
编译原理:原理、技术与工具
编译技术与应用(微课视频版·题库版)
杨金民 陈果 黎文伟
编译原理:原理、技术与工具
编译原理简明教程
费蓉
编译原理:原理、技术与工具
编译原理
刘茂福、黄革新、胡慧君 编
编译原理:原理、技术与工具
编译原理及实现(第2版)
姜淑娟;谢红侠;张辰;刘兵
编译原理:原理、技术与工具
编译原理教程(第五版)
李玉军 著
编译原理:原理、技术与工具
编译原理
李维华;岳昆;周小兵
编译原理:原理、技术与工具
编译原理(英文版)
雷向东、龙军、雷振阳 编
编译原理:原理、技术与工具
编译原理及编译程序构造
薛联凤
您可能感兴趣 / 更多
编译原理:原理、技术与工具
孩子,把你的手给我1:怎么说孩子才爱听,怎么教孩子才肯学?帮助每一位3-12岁孩子的父母结束与孩子的所有冲突!
[美]海姆·G.吉诺特
编译原理:原理、技术与工具
怎样做成大事
[美]丹·加德纳(Dan Gardner) 著;贾拥民 译;湛庐文化 出品;[丹麦]傅以斌(Bent Flyvbjerg)
编译原理:原理、技术与工具
1200年希腊罗马神话
[美]伊迪丝·汉密尔顿
编译原理:原理、技术与工具
爱情心理学(新编本)
[美]罗伯特·J. 斯腾伯格 (美)凯琳·斯腾伯格 倪爱萍 译
编译原理:原理、技术与工具
黄金圈法则
[美]西蒙·斯涅克 著;磨铁文化 出品
编译原理:原理、技术与工具
汤姆·索亚历险记 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]马克 吐温
编译原理:原理、技术与工具
富兰克林自传 名家全译本 改变无数人命运的励志传奇 埃隆马斯克反复推荐 赠富兰克林签名照及精美插图
[美]本杰明·富兰克林 著;李自修 译
编译原理:原理、技术与工具
意大利文艺复兴新艺术史
[美]迈克尔·韦恩·科尔 著;[美]斯蒂芬·J·坎贝尔;邵亦杨
编译原理:原理、技术与工具
汤姆素亚历险记:中小学生课外阅读快乐读书吧 儿童文学无障碍有声伴读世界名著童话故事
[美]马克·吐温
编译原理:原理、技术与工具
老人与海 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]海明威
编译原理:原理、技术与工具
养育的觉醒:全面激发孩子自驱力,教你如何心平气和做妈妈
[美]凯文·莱曼 著;唐晓璐 译;斯坦威 出品
编译原理:原理、技术与工具
国际大奖图画书系列 共11册(小老鼠的恐惧的大书,大灰狼,红豆与菲比,别烦我,下雪了 ,穿靴子的猫 ,先有蛋,绿 ,特别快递,如果你想看鲸鱼 ,一个部落的孩子 ) 麦克米伦世纪
[美]莱恩·史密斯 (英)埃米莉·格雷维特 (美)劳拉·瓦卡罗·等/文 (英)埃米莉·格雷维特 等/图 彭懿 杨玲玲 阿甲 孙慧阳 白薇 译