图书介绍

自制编程语言PDF|Epub|txt|kindle电子书版本下载

自制编程语言
  • (日)前桥和弥著;刘卓,徐谦,吴雅明译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115333209
  • 出版时间:2013
  • 标注页数:378页
  • 文件大小:58MB
  • 文件页数:397页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

自制编程语言PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 引子1

1.1 为什么要制作编程语言2

1.2 自制编程语言并不是很难3

1.3 本书的构成与面向读者4

1.4 用什么语言来制作6

1.5 要制作怎样的语言7

1.5.1 要设计怎样的语法7

1.5.2 要设计怎样的运行方式9

补充知识 “用户”指的是谁?12

补充知识 解释器并不会进行翻译12

1.6 环境搭建12

1.6.1 搭建开发环境12

补充知识 关于bison与flex的安装14

1.6.2 本书涉及的源代码以及编译器15

第2章 试做一个计算器17

2.1 yacc/lex是什么18

补充知识 词法分析器与解析器是各自独立的19

2.2 试做一个计算器20

2.2.1 lex21

2.2.2 简单正则表达式讲座24

2.2.3 yacc26

2.2.4 生成执行文件33

2.2.5 理解冲突所代表的含义34

2.2.6 错误处理40

2.3 不借助工具编写计算器41

2.3.1 自制词法分析器41

补充知识 保留字(关键字)46

补充知识 避免重复包含47

2.3.2 自制语法分析器48

补充知识 预读记号的处理53

2.4 少许理论知识——LL(1)与LALR(1)54

补充知识 Pascal/C中的语法处理诀窍56

2.5 习题:扩展计算器56

2.5.1 让计算器支持括号56

2.5.2 让计算器支持负数58

第3章 制作无类型语言crowbar61

3.1 制作crowbar ver.O.1 语言的基础部分62

3.1.1 crowbar是什么62

3.1.2 程序的结构63

3.1.3 数据类型64

3.1.4 变量64

补充知识 初次赋值兼做变量声明的理由66

补充说明 各种语言的全局变量处理67

3.1.5 语句与结构控制67

补充知识 elif、elsif、elseif的选择68

3.1.6 语句与运算符69

3.1.7 内置函数69

3 1.8 让crowbar支持C语言调用70

3.1.9 从crowbar中调用C语言(内置函数的编写)71

3.2 预先准备71

3.2.1 模块与命名规则72

3.2.2 内存管理模块MEM73

补充知识 valgrind75

补充知识 富翁式编程75

补充知识 符号表与扣留操作76

3.2.3 调试模块DBG76

3.3 crowbar ver.0.1 的实现77

3.3.1 crowbar的解释器——CRB_lnterpreter77

补充知识 不完全类型80

3.3.2 词法分析——crowbar.l81

补充知识 静态变量的许可范围84

3.3.3 分析树的构建——crowbar.y与create.c85

3.3.4 常量折叠89

3.3.5 错误信息89

补充知识 关于crowbar中使用的枚举型定义91

3.3.6 运行——execute.c92

3.3.7 表达式评估——eval.c96

3.3.8 值——CRB_Value104

3.3.9 原生指针型105

3.3.1 0变量106

3.3.1 1 字符串与垃圾回收机制——string_pool.c108

3.3.1 2编译与运行110

第4章 数组和mark-sweep垃圾回收器113

4.1 crowbar ver.O.2 114

4.1.1 crowbar的数组114

4.1.2 访问数组元素115

4.1.3 数组是一种引用类型116

补充知识 “数组的数组”和多维数组116

4.1.4 为数组添加元素118

4.1.5 增加(模拟)函数调用功能118

4.1.6 其他细节118

4.2 制作mark-sweep GC119

4.2.1 引用数据类型的结构119

4.2.2 mark-sweep GC121

补充知识 引用和immutable123

4.2.3 crowbar栈124

4.2.4 其他根127

4.2.5 原生函数的形式参数128

4.3 实现GC本身129

4.3.1 对象的管理方法129

4.3.2 GC何时启动129

4.3.3 sweep阶段132

补充知识 GC现存的问题133

补充知识Coping GC134

4.4 其他修改136

4.4.1 修改语法136

4.4.2 函数的模拟137

4.4.3 左值的处理139

4.4.4 创建数组和原生函数的书写方法142

4.4.5 原生指针类型的修改144

第5章 中文支持和Unicode147

5.1 中文支持策略和基础知识148

5.1.1 现存问题148

5.1.2 宽字符(双字节)串和多字节字符串149

补充知识 wchar_t肯定能表示1个字符吗?150

5.1.3 多字节字符/宽字符之间的转换函数群150

5.2 Unicode153

5.2.1 Unicode的历史153

5.2.2 Unicode的编码方式154

补充知识 Unicode可以固定(字节)长度吗?156

5.3 crowbarbook_ver.0.3 的实现156

5.3.1 要实现到什么程度?156

5.3.2 发起转换的时机157

5.3.3 关于区域设置158

5.3.4 解决0x5C问题158

补充知识失败的#ifdef160

5.3.5 应该是什么样子160

补充知识 还可以是别的样子——Code Set Independent161

第6章 制作静态类型的语言Diksam163

6.1 制作Diksam Ver O.1 语言的基本部分164

6.1.1 Diksam的运行状态164

6.1.2 什么是Diksam165

6.1.3 程序结构165

6.1.4 数据类型166

6.1.5 变量166

6.1.6 语句和流程控制167

6.1.7 表达式167

6.1.8 内建函数168

6.1 9其他168

6.2 什么是静态的/执行字节码的语言169

6.2.1 静态类型的语言169

6.2.2 什么是字节码169

6.2.3 将表达式转换为字节码170

6.2.4 将控制结构转换为字节码173

6.2.5 函数的实现173

6.3 Diksam ver.0.1 的实现——编译篇175

6.3.1 目录结构175

6.3.2 编译的概要176

6.3.3 构建分析树(create.c)176

6.3.4 修正分析树(fix_tree.c)179

6.3.5 Diksam的运行形式——DVM_Executable185

6.3.6 常量池186

补充知识 YARV的情况187

6.3.7 全局变量188

6.3.8 函数189

6.3.9 顶层结构的字节码189

6.3.1 0行号对应表190

6.3.1 1栈的需要量190

6.3.1 2生成字节码(generate.c)191

6.3.1 3生成实际的编码193

6.4 Diksam虚拟机197

6.4.1 加载/链接DVM_Executable到DVM200

6.4.2 执行——巨大的switch case202

6.4.3 函数调用204

第7章 为Diksam引入数组207

7.1 Diksam中数组的设计208

7.1.1 声明数组类型的变量208

7.1.2 数组常量209

补充知识 D语言的数组210

7.2 修改编译器210

7.2.1 数组的语法规则210

7.2.2 TypeSpecifer结构体212

7.3 修改DVM213

7.3.1 增加指令213

补充知识 更新创建Java的数组常量215

补充知识 C语言中数组的初始化217

7.3.2 对象217

补充知识 ArrayStoreException218

7.3.3 增加null219

7.3.4 哎!还缺点什么吧?219

第8章 将类引入Diksam221

8.1 分割源文件222

8.1.1 包和分割源代码222

补充知识 #include、文件名、行号225

8.1.2 DVM_ExecutableList225

8.1.3 ExecutableEntry226

8.1.4 分开编译源代码227

8.1.5 加载和再链接230

补充知识 动态加载时的编译器233

8.2 设计Diksam中的类233

8.2.1 超简单的面向对象入门233

8.2.2 类的定义和实例创建237

8.2.3 继承239

8.2.4 关于接口241

8.2.5 编译与接口242

8.2.6 Diksam怎么会设计成这样?243

8.2.7 数组和字符串的方法245

8.2.8 检查类的类型246

8.2.9 下转型246

8.3 关于类的实现——继承和多态247

8.3.1 字段的内存布局247

8.3.2 多态——以单继承为前提249

8.3.3 多继承——C++250

8.3.4 Diksam的多继承252

补充知识 无类型语言中的继承254

8.3.5 重写的条件254

8.4 关于类的实现256

8.4.1 语法规则256

8.4.2 编译时的数据结构258

8.4.3 DVM_Executable中的数据结构260

8.4.4 与类有关的指令262

补充知识 方法调用、括号和方法指针263

8.4.5 方法调用264

8.4.6 super266

8.4.7 类的链接266

8.4.8 实现数组和字符串的方法267

8.4.9 类型检查和向下转型267

补充知识 对象终结器(finalizer)和析构函数(destructor)268

第9章 应用篇271

9.1 为crowbar引入对象和闭包272

9.1.1 crowbar的对象272

9.1.2 对象实现273

9.1.3 闭包274

9.1.4 方法276

9.1.5 闭包的实现278

9.1.6 试着跟踪程序实际执行时的轨迹281

9.1.7 闭包的语法规则284

9.1.8 普通函数284

9.1.9 模拟方法(修改版)285

9.1.1 0基于原型的面向对象286

9.2 异常处理机制286

9.2.1 为crowbar引入异常286

9.2.2 setjmp()/longjmp()289

补充知识 Java和C#异常处理的不同293

9.2.3 为Diksam引入异常295

补充知识 catch的编写方法296

9.2.4 异常的数据结构297

9.2.5 异常处理时生成的字节码299

9.2.6 受查异常301

补充知识 受查异常的是与非303

补充知识 异常处理本身的是与非304

9.3 构建脚本305

9.3.1 基本思路306

9.3.2 YY_INPUT307

9.3.3 Diksam的构建脚本308

9.3.4 三次加载/链接308

9.4 为crowbar引入鬼车309

9.4.1 关于“鬼车”309

9.4.2 正则表达式常量310

9.4.3 正则表达式的相关函数311

9.5 其他312

9.5.1 foreach和迭代器(crowbar)312

9.5.2 switch case(Diksam)314

9.5.3 enum(Diksam)315

9.5.4 delegate(Diksam)316

9.5.5 final、const(Diksam)319

附录A crowbar语言的设计322

附录B Diksam语言的设计336

附录C Diksam Virtual Machine指令集359

编程语言实用化指南——写在最后369

参考文献375

热门推荐