Lua解釋器構(gòu)建:從虛擬機(jī)到編譯器
定 價(jià):99 元
叢書名:計(jì)算機(jī)前沿技術(shù)叢書
- 作者:吳尹杰 著
- 出版時(shí)間:2023/1/1
- ISBN:9787111718833
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP317.6
- 頁碼:308
- 紙張:
- 版次:
- 開本:16
Lua是一門設(shè)計(jì)精簡(jiǎn)、功能強(qiáng)大的腳本語言。本書將Lua解釋器拆解,使用C語言,一步一步構(gòu)建能夠正確運(yùn)行的Lua解釋器。本書共6章,分別為L(zhǎng)ua解釋器概述,Lua虛擬機(jī),Lua腳本的編譯與虛擬機(jī)指令運(yùn)行流程,Lua編譯器,Lua的解釋器的其他基礎(chǔ)特征,dummylua開發(fā)案例:俄羅斯方塊。閱讀本書,并不需要讀者事先精通有關(guān)編譯原理的知識(shí),書中會(huì)嘗試用簡(jiǎn)潔的語言,向讀者介紹相關(guān)的具體內(nèi)容。
Lua解釋器構(gòu)建:從虛擬機(jī)到編譯器面向?qū)ua內(nèi)部以及解釋器的設(shè)計(jì)和實(shí)現(xiàn)感興趣的讀者,并要求讀者對(duì)C語言和Lua有一定的了解和使用經(jīng)驗(yàn)。本書免費(fèi)提供書中配套案例的全部源碼,相關(guān)獲取方式見封底。
序
前言
第1章 Lua解釋器概述/
1.1 Lua解釋器/
1.1.1 Lua解釋器的整體架構(gòu)/
1.1.2 Lua解釋器的運(yùn)行機(jī)制/
1.2 Lua虛擬機(jī)/
1.2.1 虛擬機(jī)簡(jiǎn)介/
1.2.2 虛擬機(jī)指令的編碼方式/
1.2.3 虛擬機(jī)指令集/
1.3 Lua編譯器/
1.3.1 Lua的詞法分析器/
1.3.2 Lua的語法分析器/
1.4 從0開發(fā)一個(gè)Lua解釋器:dummylua項(xiàng)目/
1.4.1 項(xiàng)目簡(jiǎn)介/
1.4.2 項(xiàng)目架構(gòu)說明/
第2章 Lua虛擬機(jī)/
2.1 Lua虛擬機(jī)基礎(chǔ)知識(shí)/
2.1.1 基本類型定義/
2.1.2 虛擬機(jī)全局狀態(tài)——global_State/
2.1.3 虛擬機(jī)的線程結(jié)構(gòu)——lua_State/
2.1.4 虛擬機(jī)中執(zhí)行函數(shù)的基礎(chǔ)——CallInfo結(jié)構(gòu)/
2.1.5 C函數(shù)在虛擬機(jī)線程中的調(diào)用流程/
2.1.6 虛擬機(jī)異常處理機(jī)制/
2.1.7 dummylua項(xiàng)目的虛擬機(jī)基礎(chǔ)實(shí)現(xiàn)/
2.2 為虛擬機(jī)添加垃圾回收機(jī)制/
2.2.1 標(biāo)記清除算法/
2.2.2 增量式標(biāo)記清除算法/
2.2.3 dummylua項(xiàng)目的垃圾回收機(jī)制實(shí)現(xiàn)/
2.3 Lua虛擬機(jī)的字符串/
2.3.1 Lua字符串概述/
2.3.2 Lua字符串結(jié)構(gòu)/
2.3.3 字符串的哈希運(yùn)算/
2.3.4 短字符串與內(nèi)部化/
2.3.5 長(zhǎng)字符串與惰性哈希/
2.3.6 Lua-5.2的Hash DoS攻擊/
2.3.7 dummylua的字符串實(shí)現(xiàn)/
2.4 Lua虛擬機(jī)的表/
2.4.1 Lua表功能概述/
2.4.2 Lua表的基本數(shù)據(jù)結(jié)構(gòu)/
2.4.3 表的初始化/
2.4.4 鍵值的哈希運(yùn)算/
2.4.5 查找元素/
2.4.6 值的更新與插入/
2.4.7 調(diào)整表的大小/
2.4.8 表遍歷/
2.4.9 dummylua的表實(shí)現(xiàn)/
第3章 Lua腳本的編譯與虛擬機(jī)指令運(yùn)行流程 /
3.1 第一個(gè)編譯并運(yùn)行腳本的例子:讓Lua說“hello world”/
3.2 Lua的整體編譯和運(yùn)行流程/
3.3 虛擬機(jī)如何運(yùn)行編譯后的指令/
3.4 虛擬機(jī)輸出“hello world”的例子/
3.5 反編譯工具——protodump/
3.5.1 protodump工具簡(jiǎn)介/
3.5.2 使用protodump反編譯Lua的字節(jié)碼/
3.5.3 反編譯結(jié)果分析/
3.6 標(biāo)準(zhǔn)庫(kù)加載流程/
3.7 Lua內(nèi)置編譯器補(bǔ)充說明/
3.7.1 EBNF簡(jiǎn)介/
3.7.2 本章定義的EBNF/
3.7.3 詞法分析器設(shè)計(jì)與實(shí)現(xiàn)/
3.7.4 語句和表達(dá)式/
3.7.5 語法分析器的基礎(chǔ)設(shè)計(jì)與實(shí)現(xiàn)/
3.8 讓dummylua能夠編譯并運(yùn)行“hello world”腳本/
第4章 Lua編譯器/
4.1 Lua詞法分析器 /
4.1.1 詞法分析器簡(jiǎn)介/
4.1.2 詞法分析器基本數(shù)據(jù)結(jié)構(gòu)/
4.1.3 詞法分析器的接口設(shè)計(jì)/
4.1.4 詞法分析器的初始化流程/
4.1.5 token識(shí)別流程/
4.1.6 一個(gè)測(cè)試用例/
4.1.7 dummylua的詞法分析器實(shí)現(xiàn)/
4.2 Lua語法分析器基礎(chǔ)——expr語句編譯流程/
4.2.1 語法分析器的主要工作/
4.2.2 實(shí)現(xiàn)的語法/
4.2.3 語法分析器基本數(shù)據(jù)結(jié)構(gòu)/
4.2.4 編譯邏輯與EBNF的關(guān)聯(lián)/
4.2.5 exprstat的邏輯結(jié)構(gòu)/
4.2.6 expr的構(gòu)造與編譯/
4.2.7 suffixedexp構(gòu)造與編譯/
4.2.8 assignment構(gòu)造和編譯/
4.2.9 為dummylua添加編譯exprstat的功能/
4.3 完整的Lua語法分析器/
4.3.1 Lua的語句塊/
4.3.2 local語句編譯流程/
4.3.3 doend語句編譯流程/
4.3.4 if語句編譯流程/
4.3.5 while語句編譯流程/
4.3.6 repeat語句編譯流程/
4.3.7 for語句編譯流程/
4.3.8 break語句編譯流程/
4.3.9 function語句編譯流程/
4.3.10 return語句編譯流程 /
4.3.11 dummylua的完整語法分析器實(shí)現(xiàn)/
第5章 Lua解釋器的其他基礎(chǔ)特性/
5.1 元表/
5.1.1 元表簡(jiǎn)介/
5.1.2 元表的_index域/
5.1.3 元表的_newindex域/
5.1.4 雙目運(yùn)算事件/
5.1.5 dummylua的元表實(shí)現(xiàn)/
5.2 用戶數(shù)據(jù)/
5.2.1 用戶數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)/
5.2.2 用戶數(shù)據(jù)的接口/
5.2.3 用戶數(shù)據(jù)的垃圾回收處理/
5.2.4 用戶數(shù)據(jù)的user domain域內(nèi)部的堆內(nèi)存清理/
5.2.5 用戶數(shù)據(jù)的測(cè)試用例/
5.2.6 dummylua的用戶數(shù)據(jù)實(shí)現(xiàn)/
5.3 上值/
5.3.1 上值的定義/
5.3.2 Lua函數(shù)的探索/
5.3.3 上值的生成/
5.3.4 開放上值和已關(guān)閉上值/
5.3.5 dummylua的上值實(shí)現(xiàn)/
5.4 弱表 /
5.4.1 弱表的定義/
5.4.2 弱表的用途/
5.4.3 弱鍵/
5.4.4 弱值/
5.4.5 完全弱引用/
5.4.6 dummylua的弱表實(shí)現(xiàn)/
5.5 require機(jī)制 /
5.5.1 require功能簡(jiǎn)述/
5.5.2 package初始化/
5.5.3 require運(yùn)作流程/
5.5.4 dummylua的require機(jī)制實(shí)現(xiàn)/
第6章 dummylua開發(fā)案例:俄羅斯方塊/
6.1 案例簡(jiǎn)介/
6.2 案例代碼結(jié)構(gòu)/
6.3 編譯與運(yùn)行/
附錄/
附錄A Lua虛擬機(jī)指令集/
附錄B Lua的EBNF語法/