两周自制脚本语言

两周自制脚本语言

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
7.982 评价豆瓣读书
免费试读

作品简介

本书是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。

本书适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经学习过相关知识、有一定经验的开发者,也一定能从本书新颖的实现方式中受益良多。

千叶滋(作者),东京工业大学研究生院信息技术理工系研究科教授,兼任东京大学研究生院信息技术理工系研究科教授。著有《面向切面入门——从Java语言・面向对象步入AspectJ语言程序设计》《简明Java程序设计——Great Ideas for Java Programming》《GUI库机制——软件设计案例研习》等。

陈筱烟(译者),毕业于复旦大学计算机科学与技术系,主要研究方向为跨设备人机交互理论。从大学时期开始接触Java、JavaScript程序开发,目前对Web应用及智能手机应用开发有浓厚兴趣,并参与Android开发文档翻译项目。业余开发的移动应用在Google Play商店中已有数十万次下载。译作有《JavaScript编程全解》《App,这样设计才好卖》等。

作品目录

  1. 译者序
  2. 前言
  3. 推荐序
  4. 致谢
  5. 本书的阅读方式
  6. ● 出场角色
  7. ● 有效利用源代码
  8. 第 1 部分 基础篇
  9. 第 1 天 来,我们一起做些什么吧
  10. 1.1 机器语言与汇编语言
  11. 1.2 解释器与编译器
  12. 1.3 开发语言处理器
  13. 1.4 语言处理器的结构与本书的框架
  14. 第 2 天 设计程序设计语言
  15. 2.1 麻雀虽小、五脏俱全的程序设计语言
  16. 2.2 句尾的分号
  17. 2.3 含糊不得的语言
  18. 第 3 天 分割单词
  19. 3.1  Token 对象
  20. 3.2 通过正则表达式定义单词
  21. 3.3 借助 java.util.regex 设计词法分析器
  22. 3.4 词法分析器试运行
  23. 第 4 天 用于表示程序的对象
  24. 4.1 抽象语法树的定义
  25. 4.2 设计节点类
  26. 4.3 BNF
  27. 4.4 语法分析与抽象语法树
  28. 第 5 天 设计语法分析器
  29. 5.1 Stone 语言的语法
  30. 5.2 使用解析器与组合子
  31. 5.3 由语法分析器生成的抽象语法树
  32. 5.4 测试语法分析器
  33. 第 6 天 通过解释器执行程序
  34. 6.1  eval 方法与环境对象
  35. 6.2 各种类型的 eval 方法
  36. 6.3 关于 GluonJ
  37. 6.4 执行程序
  38. 第 7 天 添加函数功能
  39. 7.1 扩充语法规则
  40. 7.2 作用域与生存周期
  41. 7.3 执行函数
  42. 7.4 计算斐波那契数
  43. 7.5 为闭包提供支持
  44. 7.6 实现闭包
  45. 第 8 天 关联 Java 语言
  46. 8.1 原生函数
  47. 8.2 编写使用原生函数的程序
  48. 第 9 天 设计面向对象语言
  49. 9.1 设计用于操作类与对象的语法
  50. 9.2 实现类所需的语法规则
  51. 9.3 实现 eval 方法
  52. 9.4 通过闭包表示对象
  53. 9.5 运行包含类的程序
  54. 第 10 天 无法割舍的数组
  55. 10.1 扩展语法分析器
  56. 10.2 仅通过修改器来实现数组
  57. 第 2 部分 性能优化篇
  58. 第 11 天 优化变量读写性能
  59. 11.1 通过简单数组来实现环境
  60. 11.2 用于记录全局变量的环境
  61. 11.3 事先确定变量值的存放位置
  62. 11.4 修正 eval 方法并最终完成性能优化
  63. 第 12 天 优化对象操作性能
  64. 12.1 减少内存占用
  65. 12.2 能否通过事先查找变量的保存位置来优化性能
  66. 12.1 定义 lookup 方法
  67. 12.4 整合所有修改并执行
  68. 12.5 内联缓存
  69. 第 13 天 设计中间代码解释器
  70. 13.1 中间代码与机器语言
  71. 13.2 Stone 虚拟机
  72. 13.3 通过栈实现环境
  73. 13.4 寄存器的使用
  74. 13.5 引用变量的值
  75. 13.6  if 语句与 while 语句
  76. 13.7 函数的定义与调用
  77. 13.8 转换为虚拟机器语言
  78. 13.9 通过虚拟机执行
  79. 第 14 天 为 Stone 语言添加静态类型支持以优化性能
  80. 14.1 指定变量类型
  81. 14.2 通过数据类型检查发现错误
  82. 14.3 运行程序时执行类型检查
  83. 14.4 对类型省略的变量进行类型推论
  84. 14.5 Java 二进制代码转换
  85. 14.6 综合所有修改再次运行程序
  86. 第 3 部分 解说篇(自习时间)
  87. 第 15 天 手工设计词法分析器
  88. 15.1 修改自动机
  89. 15.2 自动机程序
  90. 15.3 正则表达式的极限
  91. 第 16 天 语法分析方式
  92. 16.1 正则表达式与 BNF
  93. 16.2 语法分析算法
  94. 16.3 LL 语法分析
  95. 16.4 算符优先分析法与自底向上语法分析
  96. 第 17 天 Parser 库的内部结构
  97. 17.1 组合子分析
  98. 17.2 解析器组合子的内部
  99. 第 18 天 GluonJ 的使用方法
  100. 18.1 设定类路径
  101. 18.2 启动设定
  102. 18.3 GluonJ 语言
  103. 18.4 功能总结
  104. 第 19 天 抽象语法树与设计模式
  105. 18.1 理想的设计
  106. 19.2 Interpreter 模式
  107. 19.3 Visitor 模式
  108. 19.4 使用反射
  109. 19.5 面向切面语言
载入中

热门划线

  1. 源代码首先将进行词法分析,由一长串字符串细分为多个更小的字符串单元。分割后的字符串称为单词。之后处理器将执行语法分析处理,把单词的排列转换为抽象语法树。至此为止,解释器与编译器的处理方式相同。之后,编译器将会把抽象语法树转换为其他语言,而解释器将会一边分析抽象语法树一边执行运算。6 人
  2. 解释器只需从抽象语法树的根节点开始遍历该树直至叶节点,并计算各节点的内容即可。这就是解释器的基本实现原理。3 人
  3. 软件有着惊人的生命力,即使在开发时采用了最佳设计,最终还是会随着时代的进步而被迅速淘汰2 人
  4. 有些程序设计语言无需借助软件执行,也就是说,它们不需要语言处理器。这些语言称为机器语言。机器语言可以由硬件直接解释执行,理论上不必使用软件。2 人
  5. 大多数 Java 虚拟机为了提高性能,会在执行过程中通过编译器将一部分 Java 二进制代码直接转换为机器语言使用。执行过程中进行的机器语言转换称为动态编译或 JIT 编译(Just-In-Time compile)。转换后得到的机器语言程序将被载入内存,由硬件执行,无需使用解释器。2 人
  6. .jar 文件内保存的是 Java 二进制代码。操作系统将会在后台启动 Java 虚拟机,并通过它来运行 .jar 文件2 人
  7. 语法分析阶段将一边获取单词一边构造抽象语法树,在中途发现构造有误时,需要退回若干个单词,重新构造语法树,这称为回溯。2 人
  8. 自由变量的初始值从函数(或闭包)之外获得。因此如果函数转移至其他环境中执行,自由变量的值也将相应改变。而闭包将根据函数定义时的环境设定自由变量的初始值,并在之后以约束变量的方式处理自由变量。由于它消除了自由变量,使函数闭合,故而得名闭包。2 人

喜欢这本书的人也喜欢