Lua 解釋器構建:從虛擬機到編譯器

吳尹傑

  • 出版商: 機械工業
  • 出版日期: 2023-01-01
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 308
  • 裝訂: 平裝
  • ISBN: 7111718836
  • ISBN-13: 9787111718833
  • 相關分類: Compiler
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

商品描述

Lua是一門設計精簡、功能強大的腳本語言。
本書將Lua解釋器拆解,使用C語言,一步一步構建能夠正確運行的Lua解釋器。
本書共6章,分別為Lua解釋器概述,Lua虛擬機,Lua腳本的編譯與虛擬機指令運行流程,
Lua編譯器,Lua的解釋器的其他基礎特徵,dummylua開發案例:俄羅斯方塊。
閱讀本書,並不需要讀者事先精通有關編譯原理的知識,書中會嘗試用簡潔的語言,向讀者介紹相關的具體內容。
Lua解釋器構建:從虛擬機到編譯器面向對Lua內部以及解釋器的設計和實現感興趣的讀者,
並要求讀者對C語言和Lua有一定的了解和使用經驗。
本書免費提供書中配套案例的全部源碼,相關獲取方式見封底。

作者簡介

吳尹傑網名Manistein
廣州某遊戲開發有限公司服務端技術總監,熱愛計算機技術,喜歡鑽研,
熟悉多門編程語言,為知名服務端框架skynet貢獻過多篇核心源碼分析文檔。
個人博客地址:http://manistein.club/ 。

目錄大綱


前言
第1章Lua解釋器概述/
1.1 Lua解釋器/
1.1.1 Lua解釋器的整體架構/
1.1.2 Lua解釋器的運行機制/
1.2 Lua虛擬機/
1.2.1 虛擬機簡介/
1.2.2 虛擬機指令的編碼方式/
1.2.3 虛擬機指令集/
1.3 Lua編譯器/
1.3.1 Lua的詞法分析器/
1.3.2 Lua的語法分析器/
1.4 從0開發一個Lua解釋器:dummylua項目/
1.4.1 項目簡介/
1.4.2 項目架構說明/
第2章Lua虛擬機/
2.1 Lua虛擬機基礎知識/
2.1.1 基本類型定義/
2.1.2 虛擬機全局狀態——global_State/
2.1.3 虛擬機的線程結構——lua_State/
2.1.4 虛擬機中執行函數的基礎——CallInfo結構/
2.1.5 C函數在虛擬機線程中的調用流程/
2.1.6 虛擬機異常處理機制/
2.1.7 dummylua項目的虛擬機基礎實現/
2.2 為虛擬機添加垃圾回收機制/
2.2.1 標記清除算法/
2.2.2 增量式標記清除算法/
2.2.3 dummylua項目的垃圾回收機制實現/
2.3 Lua虛擬機的字符串/
2.3.1 Lua字符串概述/
2.3.2 Lua字符串結構/
2.3.3 字符串的哈希運算/
2.3.4 短字符串與內部化/
2.3.5 長字符串與惰性哈希/
2.3.6 Lua-5.2的Hash DoS攻擊/
2.3.7 dummylua的字符串實現/
2.4 Lua虛擬機的表/
2.4.1 Lua表功能概述/
2.4.2 Lua表的基本數據結構/
2.4.3 表的初始化/
2.4.4 鍵值的哈希運算/
2.4.5 查找元素/
2.4.6 值的更新與插入/
2.4.7 調整表的大小/
2.4.8 表遍歷/
2.4.9 dummylua的表實現/
第3章Lua腳本的編譯與虛擬機指令運行流程/
3.1 第一個編譯並運行腳本的例子:讓Lua說“hello world”/
3.2 Lua的整體編譯和運行流程/
3.3 虛擬機如何運行編譯後的指令/
3.4 虛擬機輸出“hello world”的例子/
3.5 反編譯工具——protodump/
3.5.1 protodump工具簡介/
3.5.2 使用protodump反編譯Lua的字節碼/
3.5.3 反編譯結果分析/
3.6 標準庫加載流程/
3.7 Lua內置編譯器補充說明/
3.7.1 EBNF簡介/
3.7.2 本章定義的EBNF/
3.7.3 詞法分析器設計與實現/
3.7.4 語句和表達式/
3.7.5 語法分析器的基礎設計與實現/
3.8 讓dummylua能夠編譯並運行“hello world”腳本/
第4章Lua編譯器/
4.1 Lua詞法分析器/
4.1.1 詞法分析器簡介/
4.1.2 詞法分析器基本數據結構/
4.1.3 詞法分析器的接口設計/
4.1.4 詞法分析器的初始化流程/
4.1.5 token識別流程/
4.1.6 一個測試用例/
4.1.7 dummylua的詞法分析器實現/
4.2 Lua語法分析器基礎——expr語句編譯流程/
4.2.1 語法分析器的主要工作/
4.2.2 實現的語法/
4.2.3 語法分析器基本數據結構/
4.2.4 編譯邏輯與EBNF的關聯/
4.2.5 exprstat的邏輯結構/
4.2.6 expr的構造與編譯/
4.2.7 suffixedexp構造與編譯/
4.2.8 assignment構造和編譯/
4.2.9 為dummylua添加編譯exprstat的功能/
4.3 完整的Lua語法分析器/
4.3.1 Lua的語句塊/
4.3.2 local語句編譯流程/
4.3.3 doend語句編譯流程/
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的完整語法分析器實現/
第5章Lua解釋器的其他基礎特性/
5.1 元表/
5.1.1 元表簡介/
5.1.2 元表的_index域/
5.1.3 元表的_newindex域/
5.1.4 雙目運算事件/
5.1.5 dummylua的元表實現/
5.2 用戶數據/
5.2.1 用戶數據的數據結構/
5.2.2 用戶數據的接口/
5.2.3 用戶數據的垃圾回收處理/
5.2.4 用戶數據的user domain域內部的堆內存清理/
5.2.5 用戶數據的測試用例/
5.2.6 dummylua的用戶數據實現/
5.3 上值/
5.3.1 上值的定義/
5.3.2 Lua函數的探索/
5.3.3 上值的生成/
5.3.4 開放上值和已關閉上值/
5.3.5 dummylua的上值實現/
5.4 弱表/
5.4.1 弱表的定義/
5.4.2 弱表的用途/
5.4.3 弱鍵/
5.4.4 弱值/
5.4.5 完全弱引用/
5.4.6 dummylua的弱表實現/
5.5 require機制/
5.5.1 require功能簡述/
5.5.2 package初始化/
5.5.3 require運作流程/
5.5.4 dummylua的require機制實現/
第6章dummylua開發案例:俄羅斯方塊/
6.1 案例簡介/
6.2 案例代碼結構/
6.3 編譯與運行/
附錄/
附錄A Lua虛擬機指令集/
附錄B Lua的EBNF語法/