搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
微型Lisp解释器的构造与实现(使用Java和Scala)
0.00     定价 ¥ 69.90
图书来源: 浙江图书馆(由浙江新华配书)
此书还可采购25本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787568082457
  • 作      者:
    作者:刘鑫|责编:徐定翔
  • 出 版 社 :
    华中科技大学出版社
  • 出版日期:
    2022-06-01
收藏
编辑推荐
中国人自己实现和维护的开源项目,成功将Haskell的Parsec解释器移植到Java和Scala。
展开
作者简介
刘鑫 资深程序员、架构师,2000年毕业于兰州大学数学系,从事软件开发工作二十多年,参与过电子商务、政务、网络游戏、互联网服务、移动应用等多个领域的软件项目开发。近十年来,致力于将Haskell的Parsec解释器移植到Go、Swfit、Rust、Javascript、Python、Scala、Java等编程语言中,主要成果包括基于Scala 2.x的Jaskell Core Parsec和基于Java 8的Jasekll Parsec Java 8。这些成果均已应用于实际软件开发,收到了良好的效果。
展开
内容介绍
本书从零开始,将Haskell的Parsec解释器移植到Java和Scala,并通过详细的程序实例,深入浅出地介绍了组合子逻辑这个函数式编程的基本范式,给读者展示了Parsec组合子的原理、实现和应用。阅读本书,读者不但可以掌握Parsec解释器的实现方法,而且可以加深对Parsec组合子的理解。本书也可以作为学习Java和Scala编程语言的补充教材。
展开
精彩书摘
我是一个任性的人,急躁而缺少规划,总是为了兴趣冲动地投入大段人生。我庆幸自己生活在一个好时代,有程序员这样有趣的工作可以做,有方便的现代生活和发达科学技术。
我做的很多事,都远远超出了我*初的想法。当初,我只是想学一些方便、优雅的编程语言,可以让懒惰的我更自如地表达思考成果,并完成工作。后来,我又希望自己能够学会一些基本的编译器知识,包括代码的解析技术。这两个方向的学习把我神奇地引向了组合子。
这是一个有趣的方向。回头看看,这个领域并没有我*初想象的那么神奇,它可以说是一个很特定的编程模式,能漂亮地解决一些问题,但是它并不是万能的,也有很多它不能优雅地解决的问题。
在我们那个年代非常热门的函数式编程同样如此,它有不小的价值,但也不是银弹,并不比流行的编程语言更“高级”。如今我*喜欢的、*常用的编程技术,都不是“纯粹的”函数式的或面向对象的,它们都是精彩的组合体。
感谢发明这些编程语言和技术的同行,他们创造了这么多有用且有趣的东西,让我不仅仅限于日常的业务开发,更能在编程中找到乐趣,指引我思考是否有更好的工作方式。计算机科学家和天才工程师对“纯粹”的追求,贡献了很多有价值的思想,进而才有了我现在喜爱的各种工具。
年轻时,我曾幻想在学习编程的过程中建立“思想”。现在,工作二十几年后,我甚至不确定是否还有这种想法,但是我很确定,我找到了很多乐趣。
此时此刻,我才发现完成这本书的感受是“我做了一件有趣的事”。
写这本书时,我尽量使用朴素的语言,不带任何情绪。但是我希望它可以给读者带去乐趣。这本书介绍了一个有趣的编程范式,可以通过精巧的设计,实现对复杂信息模式——尤其是文本——的分析和处理。
初学者学习了Java或Scala的语法后,可以把这本书当作补充教材。它完整地实现了一个精巧却相对简单的项目,可以让读者在不依赖额外复杂框架和技术工具的情况下,完整地体验一个软件项目的全过程。编写这个解释器需要的Parsec组合子库也是由常规代码构成,它简单到我们可以在书中讨论如何从零构造。
这本书也可以作为有经验同行的一本业余读物。我喜欢看一些有趣的手工作品,例如木制计算机、乐高积木拼出的复杂机械装置、蔚为壮观的多米诺骨牌等。我觉得这本书也可以算在此列——我们可以用“常规”的编程技术实现通常认为需要专业工具构建的文本(甚至任意信息“串”)分析程序。它不仅有用,而且还很有趣。
这本书的写作灵感来自著名的Haskell教材《Write Yourself a Scheme in 48 Hours》。我在自己使用的编程语言中实现了Parsec组合子库,然后实现了若干微型LISP解释器。在回顾开发过程时写了这本书。通过实现LISP解释器讲解组合子技术、介绍函数式编程的方式是从那本书里借鉴的。我不是伟大的先行者,我只是一个吟游诗人,站在前人走过的路上,努力向后来者述说沿途的风景。如果有读者从中收获了知识和技巧,找到了共鸣和乐趣,那就是我的荣幸了。
有幸写完这本书,要感谢妻子多年来对我的包容和支持。我为了兴趣做了太多任性的事,花了太多时间学习一些工作中不太可能用到的编程技术。
本书的编辑徐定翔老师,是我多年来选购和阅读技术书籍时非常信任的人。因为徐老师的工作,我读到了很多精彩的书籍,学到了很多知识。这次能够与他合作出版这样一本书,是我的荣幸。
展开
目录
前言 1
第1章 环境准备
1.1 准备Java开发环境 4
1.2 准备Scala开发环境 6
1.3 JISP项目 6
1.4 SISP项目 7
第2章 开始构建简单的解释器
2.1 Hello REPL 10
2.2 Read Print Loop 13
2.3 算术表达式 14
第3章 数值解析
3.1 回顾 21
3.2 识别数值 24
3.3 前缀表达式 28
3.4 表达式求值 29
第4章 文本解析
4.1 文本和文本字面量 50
4.2 转义字符——在字符串中包含字符串 51
4.3 整合解释器 57
第5章 解释器环境
5.1 命名作用域 59
5.2 变量定义 62
5.3 “不可变”命名 70
第6章 语句块和结构化编程
6.1 do 74
6.2 let 78
第7章 逻辑运算和比较运算
7.1 逻辑判定true?和false? 86
7.2 比较运算 95
第8章 逻辑分支
8.1 if的实现 106
8.2 cond的实现 112
第9章 定义函数
9.1 具名函数和匿名函数 120
9.2 递归与循环 124
9.3 静态绑定、动态绑定与闭包 134
第10章 List和Quote
10.1 Quote 148
10.2 宏和宏编程 154
10.3 LIST 156
10.4 工具函数 158
第11章 内置函数和解释器模块 177
第12章 Parsec的原理和组成
12.1 状态管理 183
12.2 算子 191
随书代码 225
后记 226
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证