買這商品的人也買了...
-
$620$527 -
$590$502 -
$403自製編程語言
-
$354$336 -
$779$740 -
$862編譯系統透視:圖解編譯原理
-
$539$512 -
$352自己動手構造編譯系統:編譯、彙編與鏈接
-
$403可變目標C編譯器:設計與實現
-
$474$450 -
$250$235 -
$403Go Web 編程 (Go Web Programming)
-
$505Nginx Lua開發實戰
-
$403游戲服務器架構與優化
-
$210$200 -
$834$792 -
$534$507 -
$301分佈式對象存儲 : 原理、架構及 Go語言實現
-
$135編譯原理, 4/e
-
$403Go語言編程入門與實戰技巧
-
$403Go 語言核心編程
-
$414$393 -
$719$683 -
$505Lua 解釋器構建:從虛擬機到編譯器
-
$780$616
相關主題
商品描述
本書是一本面向Lua程序員和腳本語言愛好者的語言自製指南和實戰寶典。作者融合自己豐富的工程實踐經驗,詳細闡述Lua語言的核心語法和實現原理,深入探討Lua虛擬機、編譯器和標準庫,並給出了實際可以編譯執行的代碼。助你從零基礎開始編程實現Lua語言,徹底理解腳本語言工作原理。全書分為3個部分,共21章。第一部分主要討論LuaAPI和虛擬機實現,包括二進制chunk格式、Lua虛擬機指令集、元編程、錯誤處理等。第二部分主要討論Lua語法和編譯器實現,包括詞法分析、語法分析、代碼優化、代碼生成等。第三部分主要討論Lua輔助API和標準庫實現,包括基礎庫、實用工具庫、包和模塊、協程等。
作者簡介
張秀宏
服務器開發工程師,有多年的Java和遊戲服務器開發和架構經驗,對高級語言虛擬機有非常深入的研究。曾在EA、樂元素等遊戲公司擔任高級服務器工程師,現任某創業公司架構師。
曾於2016年6月出版《自己動手寫Java虛擬機》一書,廣受讀者好評,並多次重印。《自己動手實現Lua:虛擬機、編譯器、標準庫》是他時隔兩年之後推出的又一力作。
目錄大綱
前言
第一部分準備
第1章準備工作3
1.1準備開發環境3
1.1.1操作系統3
1.1.2安裝Lua 4
1.1.3安裝Go 4
1.2準備目錄結構4
1.3本章小結6
第二部分Lua虛擬機和Lua API
第2章二進制chunk 9
2.1什麼是二進制chunk 10
2.2 luac命令介紹11
2.2.1編譯Lua源文件11
2.2.2查看二進制chunk 13
2.3二進制chunk格式15
2.3.1數據類型16
2.3.2總體結構17
2.3.3頭部18
2.3.4函數原型22
2.4解析二進制chunk 27
2.4.1讀取基本數據類型28
2.4.2檢查頭部29
2.4.3讀取函數原型30
2.5測試本章代碼33
2.6本章小結36
第3章指令集37
3.1指令集介紹37
3.2指令編碼格式38
3.2.1編碼模式38
3.2.2操作碼39
3.2.3操作數40
3.2.4指令表41
3.3指令解碼42
3.4測試本章代碼44
3.5本章小結47
第4章Lua API 49
4.1 Lua API介紹49
4.2 Lua棧51
4.2.1 Lua數據類型和值51
4.2.2棧索引54
4.2.3定義luaStack結構體54
4.3 Lua State 57
4.3.1定義LuaState接口57
4.3.2定義luaState結構體58
4.3.3基礎棧操縱方法59
4.3.4 Push方法64
4.3.5 Access方法65
4.4測試本章代碼69
4.5本章小結70
第5章Lua運算符71
5.1 Lua運算符介紹71
5.2自動類型轉換75
5.3擴展LuaState接口79
5.3.1 Arith()方法80
5.3. 2 Compare()方法83
5.3.3 Len()方法85
5.3.4 Concat()方法86
5.4測試本章代碼87
5.5本章小結88
第6章虛擬機雛形89
6.1添加LuaVM接口89
6.1.1定義LuaVM接口91
6.1.2改造luaState結構體92
6.1.3實現LuaVM接口93
6.2實現Lua虛擬機指令94
6.2.1移動和跳轉指令94
6.2.2加載指令96
6.2.3算術運算指令101
6.2.4長度和拼接指令103
6.2.5比較指令106
6.2.6邏輯運算指令107
6.2.7 for循環指令110
6.3指令分派113
6.4測試本章代碼115
6.5本章小結118
第7章表119
7.1表介紹119
7.2表內部實現121
7.3表相關API 125
7.3.1 Get方法126
7.3.2 Set方法129
7.4表相關指令131
7.4.1 NEWTABLE 131
7.4 .2 GETTABLE 133
7.4.3 SETTABLE 135
7.4.4 SETLIST 136
7.5測試本章代碼138
7.6本章小結140
第8章函數調用141
8.1函數調用介紹141
8.2函數調用棧143
8.2.1調用幀實現144
8.2.2調用棧實現145
8.3函數調用API 147
8.3.1 Load() 148
8.3.2 Call () 149
8.4函數調用指令152
8.4.1 CLOSURE 152
8.4.2 CALL 153
8.4.3 RETURN 157
8.4.4 VARARG 158
8.4.5 TAILCALL 159
8.4.6 SELF 160
8.4.7擴展LuaVM接口162
8.4.8改進SETLIST指令163
8.5測試本章代碼164
8.6本章小結166
第9章Go函數調用167
9.1 Go函數登場167
9.1.1添加Go函數類型168
9.1.2擴展Lua API 169
9.1.3調用Go函數170
9.2 Lua註冊表172
9.2.1添加註冊表172
9.2.2操作註冊表173
9.3全局環境175
9.3.1使用API操作全局環境175
9.3.2在Lua裡訪問全局環境178
9.4測試本章代碼179
9.5本章小結181
第10章閉包和Upvalue 183
10.1閉包和Upvalue介紹183
10.1.1背景知識183
10.1 .2 Upvalue介紹185
10.1.3全局變量187
10.2 Upvalue底層支持189
10.2.1修改closure結構體189
10.2.2 Lua閉包支持191
10.2.3 Go閉包支持192
10.3 Upvalue相關指令195
10.3.1 GETUPVAL 195
10.3.2 SETUPVAL 196
10.3.3 GETTABUP 197
10.3.4 SETTABUP 199
10.3.5 JMP 200
10.4測試本章代碼202
10.5本章小結203
第11章元編程205
11.1元表和元方法介紹205
11.1.1元表206
11.1 .2元方法206
11.2支持元表207
11.3調用元方法208
11.3.1算術元方法209
11.3.2長度元方法211
11.3.3拼接元方法211
11.3.4比較元方法212
11.3.5索引元方法214
11.3.6函數調用元方法216
11.4擴展Lua API 217
11.4. 1 GetMetatable() 218
11.4.2 SetMetatable() 218
11.5測試本章代碼219
11.6本章小結222
第12章迭代器223
12.1迭代器介紹223
12.2 next()函數226
12.2.1修改luaTable結構體227
12.2.2擴展Lua API 228
12.2.3實現next()函數229
12.3通用for循環指令229
12.4測試本章代碼232
12.5本章小結234
第13章異常和錯誤處理235
13.1異常和錯誤處理介紹235
13.2異常和錯誤處理API 237
13.2 .1 Error() 238
13.2.2 PCall() 239
13.3 error()和pcall()函數240
13.4測試本章代碼241
13.5本章小結242
第三部分Lua語法和編譯器
第14章詞法分析245
14.1編譯器介紹245
14.2 Lua詞法介紹247
14.3實現詞法分析器251
14.3.1定義Token類型252
14.3.2空白字符254
14.3.3註釋256
14.3.4分隔符和運算符256
14.3.5長字符串字面量258
14.3.6短字符串字面量259
14.3.7數字字面量262
14.3.8標識符和關鍵字263
14.4 LookAhead()和其他方法264
14.5測試本章代碼265
14.6本章小結267
第15章抽象語法樹269
15.1抽象語法樹介紹269
15.2 Chunk和塊270
15.3語句272
15.3.1簡單語句273
15.3.2 while和repeat語句273
15.3.3 if語句274
15.3.4數值for循環語句275
15.3.5通用for循環語句275
15.3.6局部變量聲明語句276
15.3.7賦值語句277
15.3.8非局部函數定義語句278
15.3.9局部函數定義語句279
15.4表達式280
15.4.1簡單表達式280
15.4.2運算符表達式281
15.4.3表構造表達式281
15.4.4函數定義表達式282
15.4.5前綴表達式283
15.4.6圓括號表達式284
15.4.7表訪問表達式284
15.4.8函數調用表達式285
15.5本章小結286
第16章語法分析287
16.1語法分析介紹287
16.1. 1歧義288
16.1.2前瞻和回溯289
16.1.3解析方式290
16.2解析塊290
16.3解析語句293
16.3.1簡單語句294
16.3.2 if語句296
16.3.3 for循環語句297
16.3.4局部變量聲明和函數定義語句299
16.3.5賦值和函數調用語句300
16.3.6非局部函數定義語句302
16.4解析表達式303
16.4.1運算符表達式304
16.4.2非運算符表達式306
16.4.3函數定義表達式307
16.4.4表構造表達式308
16.4.5前綴表達式310
16.4.6圓括號表達式311
16.4.7函數調用表達式312
16.4.8表達式優化313
16.5測試本章代碼315
16.6本章小結316
第17章代碼生成317
17.1定義funcInfo結構體317
17.1.1常量表318
17.1.2寄存器分配319
17.1.3局部變量表320
17.1.4 Break表323
17.1.5 Upvalue表324
17.1. 6字節碼325
17.1.7其他信息327
17.2編譯塊327
17.3編譯語句329
17.3.1簡單語句330
17.3.2 while和repeat語句331
17.3.3 if語句333
17.3.4 for循環語句334
17.3.5局部變量聲明語句335
17.3.6賦值語句337
17.4編譯表達式339
17.4.1函數定義表達式340
17.4.2表構造表達式341
17.4.3運算符表達式343
17.4.4名字和表訪問表達式345
17.4.5函數調用表達式346
17.5生成函數原型347
17.6使用編譯器349
17.7測試本章代碼350
17.8本章小結350
第四部分Lua標準庫
第18章輔助API和基礎庫353
18.1 Lua標準庫介紹353
18.2輔助API 355
18.2.1增強版方法357
18.2.2加載方法358
18.2.3參數檢查方法359
18.2.4標準庫開啟方法360
18.3基礎庫361
18.3.1基礎庫介紹362
18.3.2基礎庫實現362
18.4測試本章代碼365
18.5本章小結366
第19章工具庫367
19.1數學庫367
19.2表庫369
19.3字符串庫372
19.4 UTF-8庫374
19.5 OS庫376
19.6本章小結379
第20章包和模塊381
20.1包和模塊介紹381
20.2實現包庫386
20.3測試本章代碼391
20.4本章小結392
第21章協程393
21.1協程介紹393
21.2協程API 396
21.2.1支持線程類型396
21.2.2支持協程操作398
21.3實現協程庫400
21.4測試本章代碼403
21.5本章小結404
附錄A Lua虛擬機指令集405
附錄B Lua語法EBNF描述407
後記409