给大家带来的一篇关于C语言编程相关的电子书资源,介绍了关于编程语言、C语言方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小259.8 MB,郑钢编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.6。
内容介绍
前百度网高 级技术工程师、专业书《电脑操作系统实情复原》的创作者的另一大作 业内权威专家联名鞋强烈推荐 滴滴打车系统部技术性高 级主管于晓声 阿里巴巴网蚂蚁金服技术性权威专家肖金亮 百度网资 深运维工程师陈晓聪 360企业安全集团公司政企云业务部技术主管冯顾 ACFUN高 级运维管理主管陆景玉 Mobvista运维管理主管黄梦溪 傻瓜式地教用户从零开始去保持一种語言,从基本原理到实践活动事无大小 每步常有具体的编码和详细的基本原理表明,用户能够很轻轻松松地把握每个保持关键点 保持开发语言关键的垃圾分类回收(GC)、虚拟机(VM)和进程等黑技术性都会这书逐一展现
内 容 提 要 这书是1本专业详细介绍自做计算机语言的书籍,书中从入门到精通地叙述了怎样开发设计一种计算机语言,及其运作这门计算机语言的虚拟机。这书主题思想包含:开发语言的作用、词法分析器、类、另一半、原生态方式、由上而下算符优先选择、语法分析、文本挖掘、虚拟机、内建类、垃圾分类回收、命令行及调节等技术性。 这书合适程序猿阅读文章,也合适对计算机语言基本原理很感兴趣的电子计算机从业者学习培训。
目录
第0章一些可能令人迷惑的问题1
0.0成功的基石不是坚持,而是“不放弃”1
0.1你懂编程语言的“心”吗2
0.2编程语言的来历2
0.3语言一定要用更底层的语言来编写吗2
0.4编译型程序和脚本程序的异同8
0.5脚本语言的分类10
0.6为什么CPU要用数字而不是字符串作为指令11
0.7为什么脚本语言比编译型语言慢11
0.8既然脚本语言比较慢,为什么大家还要用12
0.9什么是中间代码12
0.10什么是编译器的前端、后端13
0.11词法分析、语法分析、语义分析和生成代码并不是串行执行13
0.12什么是符号表14
0.13什么是关系中的闭包14
0.14什么是程序中的闭包15
0.15什么是字母表16
0.16什么是语言17
0.17正规式就是正则表达式17
0.18什么是正规(表达)式和正规集17
0.19什么是有穷自动机18
0.20有穷自动机与词法分析的关系19
0.21词法分析用有穷自动机(有穷状态自动机)的弊端19
0.22什么是文法20
0.23BNF和EBNF,非终结符和终结符,开始符号及产生式21
0.24什么是句型、句子、短语23
0.25什么是语法分析24
0.26语法分析中的推导和归约为什么都要最“左”25
0.27什么是语义分析26
0.28什么是语法制导27
0.29词法分析器吃的是lex,挤出来的是token27
0.30什么是“遍”28
0.31文法为什么可以变换28
0.32为什么消除左递归和提取左因子28
0.33FIRST集、FOLLOW集、LL(1)文法29
0.34最右推导、最左归约、句柄31
0.35算符优先分析法32
0.36算符优先文法33
0.37非终结符中常常定义的因子和项是什么33
0.38什么是抽象语法树33
0.39编译器如何使用或实现文法中的产生式34
0.40程序计数器pc与ip的区别35
第1章 设计一种面向对象脚本语言36
1.1脚本语言的功能36
1.2关键字37
1.3脚本的执行方式38
1.4“纯手工”的开发环境38
1.5定义sparrow语言的文法38
第2章实现词法分析器46
2.1柔性数组46
2.2什么是字节序47
2.3一些基础的数据结构(本节源码stepByStep/c2/a)48
2.4定义虚拟机结构(本节源码stepByStep/c2/b)56
2.5实现源码读取(本节源码stepByStep/c2/c)57
2.6unicode与UTF-859
2.6.1什么是unicode59
2.6.2什么是UTF-859
2.6.3UTF-8编码规则60
2.6.4实现UTF-8编码、解码(本节源码stepByStep/c2/d)61
2.7实现词法分析器parser(本节源码stepByStep/c2/e)66
2.7.1lex和token66
2.7.2字符串和字符串内嵌表达式66
2.7.3单词识别流程67
2.7.4定义token和parser68
2.7.5解析关键字及获取字符71
2.7.6解析标识符和unicode码点73
2.7.7解析字符串、内嵌表达式、转义字符75
2.7.8跳过注释和空行77
2.7.9获取token79
2.7.10token匹配和初始化parser84
2.8构建主程序(本节源码stepByStep/c2/f)85
2.9编译、测试(本节源码stepByStep/c2/f)88
2.9.1一个简单的makefile88
2.9.2测试paser92
第3章类与对象95
3.1对象在C语言中的概貌95
3.2实现对象头(本节源码stepByStep/c3/a)96
3.3实现class定义(本节源码stepByStep/c3/a)99
3.4实现字符串对象(本节源码stepByStep/c3/a)101
3.5模块对象和实例对象(本节源码stepByStep/c3/a)103
3.6upvalue、openUpvalue和closedUpvalue106
3.7实现函数对象、闭包对象与调用框架(本节源码stepByStep/c3/a)107
3.8完善词法分析器之数字解析(本节源码stepByStep/c3/b)111
3.9完善词法分析器之字符串解析和获取token(本节源码stepByStep/c3/b)114
3.10最终版词法分析器的功能验证(本节源码stepByStep/c3/b)116
3.11实现list列表对象(本节源码stepByStep/c3/c)118
3.12range对象(本节源码stepByStep/c3/c)121
3.13迟到的class.c(本节源码stepByStep/c3/c)122
3.14map对象(本节源码stepByStep/c3/c)124
3.14.1哈希表124
3.14.2map对象头文件及entry125
3.14.3冲突探测链与伪删除126
3.14.4map对象的实现128
3.15线程对象(本节源码stepByStep/c3/c)134
3.15.1线程、协程浅述134
3.15.2运行时栈137
3.15.3用户线程的实现138
第4章原生方法及基础实现142
4.1解释器流程(本节源码stepBystep/c4/a)142
4.2符号表144
4.2.1模块的符号表144
4.2.2类方法的符号表144
4.2.3模块变量符号表146
4.2.4局部变量符号表147
4.2.5常量符号表147
4.3方法在运行时栈中的参数147
4.4定义模块变量(本节源码stepByStep/c4/b)148
4.5原生方法(本节源码stepByStep/c4/b)154
4.5.1定义裸类154
4.5.2定义返回值与方法绑定的宏155
4.5.3定义原生方法157
4.5.4符号表操作159
4.5.5定义类、绑定方法、绑定基类160
4.6元类及实现(本节源码stepByStep/c4/b)161
4.6.1meta-class类、class类、object类161
4.6.2创建元类,绑定类方法163
4.7加载模块(本节源码stepByStep/c4/c)164
4.8虚拟机简介166
4.8.1虚拟机分类及优缺点166
4.8.2为什么要采用虚拟机168
4.8.3虚拟机的简单优化170
4.9字节码171
第5章自上而下算符优先——TDOP177
5.1自上而下算符优先—TDOP177
5.2来自Douglas Crockford的教程177
5.3TDOP原理194
5.3.1一些概念194
5.3.2一个小例子196
5.3.3expression的思想197
5.3.4while(rbp < token.lbp)的意义200
5.3.5进入expression时当前token的类别201
5.3.6TDOP总结202
第6章实现语法分析与语义分析204
6.1定义指令(本节源码stepByStep/c6/a)204
6.2核心脚本(本节源码stepByStep/c6/a)206
6.3写入指令(本节源码stepByStep/c6/a)212
6.4编译模块(本节源码stepByStep/c6/a)216
6.5语义分析的本质218
6.6注册编译函数(本节源码stepByStep/c6/b)218
6.7赋值运算的条件221
6.8实现expression及其周边(本节源码stepByStep/c6/c)223
6.9局部变量作用域管理228
6.10变量声明、中缀、前缀及混合运算符方法签名(本节源码stepByStep/c6/d)229
6.11解析标识符(本节源码stepByStep/c6/e)233
6.11.1处理参数列表及相关233
6.11.2实现运算符和标识符的签名函数235
6.11.3upvalue的查找与添加239
6.11.4变量的加载与存储242
6.11.5编译代码块及结束编译单元243
6.11.6各种方法调用246
6.11.7标识符的编译249
6.12编译内嵌表达式(本节源码stepByStep/c6/f)256
6.13编译bool及null(本节源码stepByStep/c6/g)258
6.14this、继承、基类(本节源码stepByStep/c6/h)259
6.15编译小括号、中括号及list列表字面量(本节源码stepByStep/c6/i)260
6.16编译方法调用和map字面量(本节源码stepByStep/c6/j)263
6.17编译数学运算符(本节源码stepByStep/c6/k)266
6.18编译变量定义(本节源码stepByStep/c6/l)270
6.19编译语句274
6.19.1编译if语句(本节源码stepByStep/c6/m)274
6.19.2编译while语句(本节源码stepByStep/c6/n)275
6.19.3编译return、break和continue语句(本节源码stepByStep/c6/o)280
6.19.4编译for循环语句(本节源码stepByStep/c6/p)284
6.19.5编译代码块及单一语句(本节源码stepByStep/c6/q)288
6.20编译类定义(本节源码stepByStep/c6/r)289
6.20.1方法的声明与定义289
6.20.2构造函数与创建对象291
6.20.3编译方法293
6.20.4编译类定义296
6.21编译函数定义(本节源码stepByStep/c6/s)298
6.22编译模块导入(本节源码stepByStep/c6/t)300
第7章虚拟机306
7.1创建类与堆栈框架(本节源码stepByStep/c7/a)306
7.2upvalue的创建与关闭(本节源码stepByStep/c7/b)309
7.3修正操作数(本节源码stepByStep/c7/c)312
7.4执行指令(本节源码stepByStep/c7/d)314
7.4.1一些基础工作314
7.4.2解码、译码、执行(本节源码stepByStep/c7/d)316
7.5运行虚拟机(本节源码stepByStep/c7/e)334
第8章内建类及其方法337
8.1Bool类及其方法(本节源码stepByStep/c8/a)337
8.2线程类及其方法(本节源码stepByStep/c8/b)338
8.3函数类及其方法和函数调用重载(本节源码stepByStep/c8/c)345
8.4Null类及其方法(本节源码stepByStep/c8/d)347
8.5Num类及其方法(本节源码stepByStep/c8/e)348
8.6String类及其方法(本节源码stepByStep/c8/f)355
8.7List类及其方法(本节源码stepByStep/c8/g)369
8.8Map类及其方法(本节源码stepByStep/c8/h)374
8.9range类及其方法(本节源码stepByStep/c8/i)380
8.10System类及其方法(本节源码stepByStep/c8/j)383
8.11收尾与测试(本节源码stepByStep/c8/k)388
第9章垃圾回收393
9.1垃圾回收浅述393
9.2理论基础395
9.3标记—清扫回收算法396
9.4一些基础结构(本节源码stepByStep/c9/a)397
9.5实现GC(本节源码stepByStep/c9/a)400
9.6添加临时根对象与触发GC411
第10章 命令行及调试415
10.1释放虚拟机(本节源码stepByStep/c10/a)415
10.2简单的命令行界面(本节源码stepByStep/c10/a)415
10.3调试(本节源码stepByStep/c10/b)417
学习笔记
python与c语言的不同
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言。本萌新也刚开始接触Python,发现Python与其他语言确实有很大的区别。Python是由C语言实现的,因此想把Python与C语言做一个简单的比较。 一、 C语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速度快,不能跨平台,一般用于操作系统,驱动等底层开发。 Python是编译型还是解释型这个界限并不明显,但大致上可以理解为解释型语言,执行速度慢,由于Python虚拟机,Python是可以跨平台的,Python高度集成适合于软件的快……
python需要c语言基础吗
学python需要c语言基础吗? 学python可以不需要c语言基础,Python简单易学,适合零基础入门。不同的编程语言就好比其他国家的语言(英语、法语、德语),只不过一个是用来和机器交流的、一个是用来和人来交流的。 首先要做的是了解一些python的语法,就可以写一些比较简单的东西了,深入的话在了解一些算法相关的内容。 另外可以多看一些计算机基础方面的书籍,对学习编程会很有帮助。 相关推荐:《Python教程》 以上就是python需要c语言基础吗的详细内容,更多请关注码农之家其它相关文章! ……
python中赋值与c语言区别
python中赋值与c语言区别?先来看看简单的 Python 代码在内存中是什么样子的: b = 3b = b + 5 它在内存中的操作示意图是这样的: 然而,从代码的的字面意思上看,“把 3 赋给 b,把 b 加 5 之后再赋给 b。” 也就是把代码看成这个样子: b ← 3b ← b + 5 所以下面这张在内存中的操作图可能更符合我们的直觉: 也即 b + 5 的值又写回到 b 中。典型的 C 程序就是这样的。为变量 b 分配一个 int 型的内存单元,然后将整数 3 存放在该内存单元中。b 就代表了该块内存空间,不再移动,可以更新 b 的值,但 b 在内存中的地址就不再变化了。所以我们说 b = b + 5,就等于 b ← b + 5,把 b 的值加 5 之后还依然放入 b 中。 变量……
Java版C语言版简单使用静态语言实现动态数组的方法
动态语言相对于静态语言的一个优势,就是数组可以不需要预先确定大小,对于一些数组长度不确定的场景下是非常有用的。像PHP,只需要声明一下数组 $arr = array() 然后就可以直接 $arr[] = 1,$arr[] = 2,$arr[] = 3 ...这样一直加元素了,删除一个元素就直接使用unset($arr[1]),元素的空间就被释放了,而C和JAVA原生的数组就没有这么方便,声明的时候就必须先预先确定长度,由编译器分配相应的内存空间。不过通过一些巧妙的做法,也是可以实现一样的功能的,这也是本文的主要内容。 JAVA版 JAVA自带了一个集合类ArrayList,可以实现动态数组的功能,相比原生的数组,使用起来非常方便。在阅读Tomcat源码的时候,发现……
以上就是本次介绍的C语言编程电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。
展开 +
收起 -