舉報

會員
自己動手構(gòu)建編程語言:如何設(shè)計編譯器、解釋器和DSL
最新章節(jié):
封底
本書主要研究如何構(gòu)建一種新的編程語言。書中將介紹編程語言設(shè)計方面的主題,并重點介紹編程語言實現(xiàn)。本書的新穎之處在于將傳統(tǒng)的編譯器-編譯器工具(Flex和BYACC)與兩種更高級的實現(xiàn)語言融合。一種非常高級的語言(Unicon)可以像黃油一樣穿透編譯器的數(shù)據(jù)結(jié)構(gòu)和算法,而另一種主流的現(xiàn)代語言(Java)則展示了如何在更典型的生產(chǎn)環(huán)境中實現(xiàn)相同的代碼。本書主要面向?qū)Πl(fā)明編程語言或開發(fā)領(lǐng)域特定語言感興趣的軟件開發(fā)人員。學(xué)習(xí)編譯器構(gòu)建課程的計算機(jī)科學(xué)相關(guān)專業(yè)學(xué)生也會發(fā)現(xiàn)這本書非常適合作為語言實現(xiàn)的實用指南,可以為理論教材提供有益補(bǔ)充。
最新章節(jié)
書友吧品牌:機(jī)械工業(yè)出版社
譯者:李剛強(qiáng)等
上架時間:2024-05-11 17:37:49
出版社:機(jī)械工業(yè)出版社
本書數(shù)字版權(quán)由機(jī)械工業(yè)出版社提供,并由其授權(quán)上海閱文信息技術(shù)有限公司制作發(fā)行
- 封底 更新時間:2024-05-11 19:46:45
- 作者簡介
- 附錄B 部分章節(jié)要點
- 附錄A Unicon基礎(chǔ)
- 第四部分 附錄
- 17.4 本章小結(jié)
- 17.3 延伸閱讀的參考資料
- 17.2.5 設(shè)計和實現(xiàn)IDE和GUI構(gòu)建器
- 17.2.4 監(jiān)視和調(diào)試程序執(zhí)行
- 17.2.3 獲取代碼優(yōu)化方面的專業(yè)知識
- 17.2.2 學(xué)習(xí)如何實現(xiàn)解釋器和字節(jié)碼機(jī)器
- 17.2.1 學(xué)習(xí)編程語言設(shè)計
- 17.2 決定何去何從
- 17.1 反思從編寫這本書中學(xué)到的東西
- 第17章 結(jié)語
- 16.5 思考題
- 16.4 本章小結(jié)
- 16.3.3 回收實時內(nèi)存并將其放入連續(xù)內(nèi)存塊
- 16.3.2 遍歷基本變量以標(biāo)記實時數(shù)據(jù)
- 16.3.1 組織堆內(nèi)存區(qū)域
- 16.3 標(biāo)記實時數(shù)據(jù)并清理剩余數(shù)據(jù)
- 16.2.4 引用計數(shù)的缺點和局限性
- 16.2.3 為賦值運(yùn)算符修改生成的代碼
- 16.2.2 生成堆分配代碼
- 16.2.1 將引用計數(shù)添加到Jzero
- 16.2 對象的引用計數(shù)
- 16.1 認(rèn)識垃圾收集的重要性
- 第16章 垃圾收集
- 15.5 思考題
- 15.4 本章小結(jié)
- 15.3.4 創(chuàng)建渲染區(qū)域控制結(jié)構(gòu)
- 15.3.3 使用嵌套渲染區(qū)域更改圖形細(xì)節(jié)層次
- 15.3.2 使用內(nèi)置函數(shù)指定渲染區(qū)域
- 15.3.1 從顯示列表渲染3D圖形
- 15.3 Unicon中的渲染區(qū)域
- 15.2.2 通過控制結(jié)構(gòu)消除過多參數(shù)
- 15.2.1 掃描環(huán)境及其基本操作
- 15.2 Icon和Unicon中的字符串掃描
- 15.1.2 減少過多的冗余參數(shù)
- 15.1.1 定義控制結(jié)構(gòu)
- 15.1 了解何時需要新的控制結(jié)構(gòu)
- 第15章 域控制結(jié)構(gòu)
- 14.6 思考題
- 14.5 本章小結(jié)
- 14.4.2 開發(fā)Unicon的內(nèi)置函數(shù)
- 14.4.1 在Unicon中編寫運(yùn)算符
- 14.4 為Unicon開發(fā)運(yùn)算符和函數(shù)
- 14.3 集成內(nèi)置組件與控制結(jié)構(gòu)
- 14.2.2 編寫用于本機(jī)代碼實現(xiàn)的內(nèi)置函數(shù)
- 14.2.1 向字節(jié)碼解釋器添加內(nèi)置函數(shù)
- 14.2 編寫內(nèi)置函數(shù)
- 14.1.4 將字符串連接添加到本機(jī)運(yùn)行時系統(tǒng)
- 14.1.3 為字節(jié)碼解釋器添加字符串連接
- 14.1.2 在中間代碼生成中添加字符串連接
- 14.1.1 運(yùn)算符是否需要硬件支持
- 14.1 實現(xiàn)運(yùn)算符
- 第14章 運(yùn)算符和內(nèi)置函數(shù)的實現(xiàn)
- 13.8 思考題
- 13.7 本章小結(jié)
- 13.6.3 鏈接、加載并包括運(yùn)行時系統(tǒng)
- 13.6.2 從本機(jī)匯編程序到目標(biāo)文件
- 13.6.1 以匯編語言格式編寫x64代碼
- 13.6 生成x64輸出
- 13.5.7 處理標(biāo)簽和偽指令
- 13.5.6 為方法調(diào)用和返回生成代碼
- 13.5.5 為分支和條件分支生成本機(jī)代碼
- 13.5.4 生成指針操作的代碼
- 13.5.3 生成簡單表達(dá)式的x64代碼
- 13.5.2 實現(xiàn)x64代碼生成器方法
- 13.5.1 將中間代碼地址映射到x64內(nèi)存地址
- 13.5 將中間代碼轉(zhuǎn)換為x64代碼
- 13.4.2 分配寄存器以加速本地區(qū)域
- 13.4.1 從空策略開始
- 13.4 使用寄存器
- 13.3.2 將內(nèi)存區(qū)域映射到基于x64寄存器的地址模式
- 13.3.1 為x64指令添加類
- 13.3 x64指令集
- 13.2 決定是否生成本機(jī)代碼
- 13.1 技術(shù)需求
- 第13章 生成本機(jī)代碼
- 12.7 思考題
- 12.6 本章小結(jié)
- 12.5 Unicon示例:icont中的字節(jié)碼生成
- 12.4 鏈接、加載并包括運(yùn)行時系統(tǒng)
- 12.3.2 以二進(jìn)制格式輸出字節(jié)碼
- 12.3.1 以匯編格式輸出字節(jié)碼
- 12.3 比較字節(jié)碼匯編程序與二進(jìn)制格式
- 12.2.8 處理中間代碼中的標(biāo)簽和其他偽指令
- 12.2.7 為方法調(diào)用和返回生成代碼
- 12.2.6 為分支和條件分支生成字節(jié)碼
- 12.2.5 生成指針操作的代碼
- 12.2.4 為簡單表達(dá)式生成字節(jié)碼
- 12.2.3 實現(xiàn)字節(jié)碼生成器方法
- 12.2.2 將中間代碼地址映射到字節(jié)碼地址
- 12.2.1 為字節(jié)碼指令添加類
- 12.2 轉(zhuǎn)換中間代碼為Jzero字節(jié)碼
- 12.1 技術(shù)需求
- 第12章 生成字節(jié)碼
- 11.10 思考題
- 11.9 本章小結(jié)
- 11.8.4 制作運(yùn)行時系統(tǒng)的其余部分
- 11.8.3 獲取、解碼和執(zhí)行指令
- 11.8.2 在運(yùn)行時保留類型信息
- 11.8.1 了解目標(biāo)導(dǎo)向的字節(jié)碼
- 11.8 檢查Unicon字節(jié)碼解釋器iconx
- 11.7 運(yùn)行Jzero程序
- 11.6 編寫Jzero運(yùn)行時系統(tǒng)
- 11.5.6 啟動Jzero解釋器
- 11.5.5 執(zhí)行指令
- 11.5.4 指令解碼
- 11.5.3 獲取指令并推進(jìn)指令指針
- 11.5.2 初始化解釋器狀態(tài)
- 11.5.1 將字節(jié)碼加載到內(nèi)存中
- 11.5 實現(xiàn)字節(jié)碼解釋器
- 11.4.2 了解棧機(jī)操作的基礎(chǔ)知識
- 11.4.1 定義Jzero字節(jié)碼文件格式
- 11.4 為Jzero構(gòu)建字節(jié)碼指令集
- 11.3 比較字節(jié)碼和中間碼
- 11.2 什么是字節(jié)碼
- 11.1 技術(shù)需求
- 第11章 字節(jié)碼解釋器
- 第三部分 代碼生成與運(yùn)行時系統(tǒng)
- 10.7 本章小結(jié)
- 10.6 添加Java支持
- 10.5 使用解析結(jié)果突出顯示錯誤
- 10.4.2 在繪制單個標(biāo)記時對其進(jìn)行著色
- 10.4.1 擴(kuò)展EditableTextList組件以支持顏色
- 10.4 使用詞法信息為標(biāo)記著色
- 10.3 避免在每次更改時重新解析整個文件
- 10.2.2 將編譯器輸出發(fā)送到IDE
- 10.2.1 從IDE中分析源代碼
- 10.2 將編譯器集成到程序員的編輯器中
- 10.1 下載本章中使用的示例IDE
- 第10章 IDE中的語法著色
- 9.7 本章小結(jié)
- 9.6.4 檢查生成的中間代碼
- 9.6.3 為方法調(diào)用生成中間代碼
- 9.6.2 生成循環(huán)代碼
- 9.6.1 為條件表達(dá)式生成標(biāo)簽?zāi)繕?biāo)
- 9.6 為控制流生成代碼
- 9.5 為表達(dá)式生成代碼
- 9.4 用標(biāo)簽為控制流注釋語法樹
- 9.3.2 聲明
- 9.3.1 指令
- 9.3 中間代碼指令集
- 9.2.5 生成標(biāo)簽和臨時變量
- 9.2.4 將中間代碼屬性添加到樹中
- 9.2.3 為中間代碼引入數(shù)據(jù)類型
- 9.2.2 了解生成程序的存儲區(qū)域
- 9.2.1 為什么要生成中間代碼
- 9.2 準(zhǔn)備生成代碼
- 9.1 技術(shù)需求
- 第9章 中間代碼生成
- 8.6 思考題
- 8.5 本章小結(jié)
- 8.4.3 在實例訪問時檢查類型
- 8.4.2 在創(chuàng)建實例時檢查類型
- 8.4.1 處理實例變量聲明
- 8.4 檢查結(jié)構(gòu)化類型訪問
- 8.3.3 檢查返回語句中的類型
- 8.3.2 檢查每個方法調(diào)用站點的類型
- 8.3.1 計算參數(shù)和返回類型信息
- 8.3 檢查方法調(diào)用
- 8.2.3 在數(shù)組訪問期間檢查類型
- 8.2.2 在數(shù)組創(chuàng)建期間檢查類型
- 8.2.1 處理數(shù)組變量聲明
- 8.2 檢查數(shù)組類型的操作
- 8.1 技術(shù)需求
- 第8章 檢查數(shù)組、方法調(diào)用和結(jié)構(gòu)訪問的類型
- 7.7 思考題
- 7.6 本章小結(jié)
- 7.5 Unicon中的運(yùn)行時類型檢查和類型推斷
- 7.4.2 計算和檢查內(nèi)部節(jié)點的類型
- 7.4.1 確定葉子的類型
- 7.4 確定每個語法樹節(jié)點的類型
- 7.3.2 將類型繼承到變量列表中
- 7.3.1 從保留字合成類型
- 7.3 將類型信息分配給聲明的變量
- 7.2.2 子類化復(fù)雜類型的基類
- 7.2.1 定義表示類型的基類
- 7.2 編譯器中的類型表示
- 7.1 技術(shù)需求
- 第7章 基本類型檢查
- 6.9 思考題
- 6.8 本章小結(jié)
- 6.7 測試和調(diào)試符號表
- 6.6.3 在方法調(diào)用中插入self作為第一個參數(shù)
- 6.6.2 為成員變量引用插入self
- 6.6.1 名稱修飾
- 6.6 在Unicon中處理包和類作用域
- 6.5.2 報告語義錯誤
- 6.5.1 將符號插入符號表
- 6.5 查找重新聲明的變量
- 6.4.2 發(fā)現(xiàn)方法體中變量的使用
- 6.4.1 識別方法體
- 6.4 檢查未聲明的變量
- 6.3.5 綜合isConst屬性
- 6.3.4 填充符號表
- 6.3.3 創(chuàng)建符號表
- 6.3.2 定義符號表和符號表條目的類
- 6.3.1 向語法樹添加語義屬性
- 6.3 為每個作用域創(chuàng)建和填充符號表
- 6.2.3 選擇正確的樹遍歷
- 6.2.2 賦值和取消引用變量
- 6.2.1 聲明和作用域
- 6.2 建立符號表基礎(chǔ)
- 6.1 技術(shù)需求
- 第6章 符號表
- 第二部分 語法樹遍歷
- 5.9 思考題
- 5.8 本章小結(jié)
- 5.7.3 使用dot輸出語法樹
- 5.7.2 以文本格式輸出語法樹
- 5.7.1 避免常見的語法樹錯誤
- 5.7 調(diào)試并測試語法樹
- 5.6 為Jzero語言形成語法樹
- 5.5.2 使用樹節(jié)點工廠方法
- 5.5.1 訪問值棧上的樹節(jié)點
- 5.5 從產(chǎn)生式規(guī)則構(gòu)建內(nèi)部節(jié)點
- 5.4.4 確定需要哪些葉子
- 5.4.3 為解析器的值棧包裝葉子
- 5.4.2 使用YACC的值棧
- 5.4.1 用葉子包裝標(biāo)記
- 5.4 從終結(jié)符創(chuàng)建葉子
- 5.3.2 解析樹與語法樹
- 5.3.1 定義語法樹類型
- 5.3 樹
- 5.2 GNU make的使用
- 5.1 技術(shù)需求
- 第5章 語法樹
- 4.8 思考題
- 4.7 本章小結(jié)
- 4.6.3 使用Merr生成更好的語法錯誤消息
- 4.6.2 向Java語法錯誤消息添加詳細(xì)信息
- 4.6.1 向Unicon語法錯誤消息添加詳細(xì)信息
- 4.6 改進(jìn)語法錯誤消息
- 4.5.5 運(yùn)行Jzero解析器
- 4.5.4 Java Jzero解析器代碼
- 4.5.3 Unicon Jzero代碼
- 4.5.2 Jzero yacc規(guī)范
- 4.5.1 Jzero lex規(guī)范
- 4.5 為Jzero編寫解析器
- 4.4.6 組合簡單示例
- 4.4.5 語法錯誤修復(fù)
- 4.4.4 修復(fù)yacc解析器中的沖突
- 4.4.3 理解yacc解析器
- 4.4.2 組合yacc上下文無關(guān)文法部分
- 4.4.1 聲明頭部分中的符號
- 4.4 使用iyacc和BYACC/J
- 4.3.2 編寫編程構(gòu)造規(guī)則
- 4.3.1 編寫上下文無關(guān)文法規(guī)則
- 4.3 理解上下文無關(guān)文法
- 4.2 語法分析
- 4.1 技術(shù)需求
- 第4章 解析
- 3.8 思考題
- 3.7 本章小結(jié)
- 3.6 正則表達(dá)式并不總是足夠的
- 3.5.4 運(yùn)行Jzero掃描器
- 3.5.3 Java Jzero代碼
- 3.5.2 Unicon Jzero代碼
- 3.5.1 Jzero Flex規(guī)范
- 3.5 為Jzero編寫掃描器
- 3.4.6 擴(kuò)展示例以構(gòu)造標(biāo)記
- 3.4.5 標(biāo)記和詞法屬性
- 3.4.4 運(yùn)行掃描器
- 3.4.3 編寫一個簡單的源代碼掃描器
- 3.4.2 正則表達(dá)式部分
- 3.4.1 頭部分
- 3.4 使用UFlex和JFlex
- 3.3.2 正則表達(dá)式示例
- 3.3.1 正則表達(dá)式規(guī)則
- 3.3 正則表達(dá)式
- 3.2 詞素、詞類和標(biāo)記
- 3.1 技術(shù)需求
- 第3章 掃描源代碼
- 2.8 思考題
- 2.7 本章小結(jié)
- 2.6.2 添加3D圖形支持
- 2.6.1 2D圖形語言支持
- 2.6 案例研究:設(shè)計Unicon中的圖形功能
- 2.5 完成Jzero語言的定義
- 2.4 整體程序結(jié)構(gòu)
- 2.3.3 領(lǐng)域特定類型
- 2.3.2 復(fù)合類型
- 2.3.1 原子類型
- 2.3 決定支持哪種數(shù)據(jù)
- 2.2 指定控制流
- 2.1 確定要編程語言提供的單詞和標(biāo)點符號的類型
- 第2章 編程語言設(shè)計
- 1.7 思考題
- 1.6 本章小結(jié)
- 1.5.4 Unicon需求#4——提供可實現(xiàn)的通用系統(tǒng)接口
- 1.5.3 Unicon需求#3——現(xiàn)代應(yīng)用程序的高級輸入/輸出
- 1.5.2 Unicon需求#2——支持大型大數(shù)據(jù)項目
- 1.5.1 Unicon需求#1——保留人們對Icon的喜愛
- 1.5 案例研究:Unicon語言的創(chuàng)建需求
- 1.4 建立語言需求
- 1.3 適用于其他軟件工程任務(wù)
- 1.2 編程語言與庫的差別
- 1.1.3 示例中使用的語言
- 1.1.2 組織字節(jié)碼語言實現(xiàn)
- 1.1.1 編程語言實現(xiàn)的類型
- 1.1 編寫自己的編程語言的動機(jī)
- 第1章 為什么要構(gòu)建另一種編程語言
- 第一部分 編程語言導(dǎo)論
- 前言
- 內(nèi)容簡介
- 版權(quán)信息
- 封面
- 封面
- 版權(quán)信息
- 內(nèi)容簡介
- 前言
- 第一部分 編程語言導(dǎo)論
- 第1章 為什么要構(gòu)建另一種編程語言
- 1.1 編寫自己的編程語言的動機(jī)
- 1.1.1 編程語言實現(xiàn)的類型
- 1.1.2 組織字節(jié)碼語言實現(xiàn)
- 1.1.3 示例中使用的語言
- 1.2 編程語言與庫的差別
- 1.3 適用于其他軟件工程任務(wù)
- 1.4 建立語言需求
- 1.5 案例研究:Unicon語言的創(chuàng)建需求
- 1.5.1 Unicon需求#1——保留人們對Icon的喜愛
- 1.5.2 Unicon需求#2——支持大型大數(shù)據(jù)項目
- 1.5.3 Unicon需求#3——現(xiàn)代應(yīng)用程序的高級輸入/輸出
- 1.5.4 Unicon需求#4——提供可實現(xiàn)的通用系統(tǒng)接口
- 1.6 本章小結(jié)
- 1.7 思考題
- 第2章 編程語言設(shè)計
- 2.1 確定要編程語言提供的單詞和標(biāo)點符號的類型
- 2.2 指定控制流
- 2.3 決定支持哪種數(shù)據(jù)
- 2.3.1 原子類型
- 2.3.2 復(fù)合類型
- 2.3.3 領(lǐng)域特定類型
- 2.4 整體程序結(jié)構(gòu)
- 2.5 完成Jzero語言的定義
- 2.6 案例研究:設(shè)計Unicon中的圖形功能
- 2.6.1 2D圖形語言支持
- 2.6.2 添加3D圖形支持
- 2.7 本章小結(jié)
- 2.8 思考題
- 第3章 掃描源代碼
- 3.1 技術(shù)需求
- 3.2 詞素、詞類和標(biāo)記
- 3.3 正則表達(dá)式
- 3.3.1 正則表達(dá)式規(guī)則
- 3.3.2 正則表達(dá)式示例
- 3.4 使用UFlex和JFlex
- 3.4.1 頭部分
- 3.4.2 正則表達(dá)式部分
- 3.4.3 編寫一個簡單的源代碼掃描器
- 3.4.4 運(yùn)行掃描器
- 3.4.5 標(biāo)記和詞法屬性
- 3.4.6 擴(kuò)展示例以構(gòu)造標(biāo)記
- 3.5 為Jzero編寫掃描器
- 3.5.1 Jzero Flex規(guī)范
- 3.5.2 Unicon Jzero代碼
- 3.5.3 Java Jzero代碼
- 3.5.4 運(yùn)行Jzero掃描器
- 3.6 正則表達(dá)式并不總是足夠的
- 3.7 本章小結(jié)
- 3.8 思考題
- 第4章 解析
- 4.1 技術(shù)需求
- 4.2 語法分析
- 4.3 理解上下文無關(guān)文法
- 4.3.1 編寫上下文無關(guān)文法規(guī)則
- 4.3.2 編寫編程構(gòu)造規(guī)則
- 4.4 使用iyacc和BYACC/J
- 4.4.1 聲明頭部分中的符號
- 4.4.2 組合yacc上下文無關(guān)文法部分
- 4.4.3 理解yacc解析器
- 4.4.4 修復(fù)yacc解析器中的沖突
- 4.4.5 語法錯誤修復(fù)
- 4.4.6 組合簡單示例
- 4.5 為Jzero編寫解析器
- 4.5.1 Jzero lex規(guī)范
- 4.5.2 Jzero yacc規(guī)范
- 4.5.3 Unicon Jzero代碼
- 4.5.4 Java Jzero解析器代碼
- 4.5.5 運(yùn)行Jzero解析器
- 4.6 改進(jìn)語法錯誤消息
- 4.6.1 向Unicon語法錯誤消息添加詳細(xì)信息
- 4.6.2 向Java語法錯誤消息添加詳細(xì)信息
- 4.6.3 使用Merr生成更好的語法錯誤消息
- 4.7 本章小結(jié)
- 4.8 思考題
- 第5章 語法樹
- 5.1 技術(shù)需求
- 5.2 GNU make的使用
- 5.3 樹
- 5.3.1 定義語法樹類型
- 5.3.2 解析樹與語法樹
- 5.4 從終結(jié)符創(chuàng)建葉子
- 5.4.1 用葉子包裝標(biāo)記
- 5.4.2 使用YACC的值棧
- 5.4.3 為解析器的值棧包裝葉子
- 5.4.4 確定需要哪些葉子
- 5.5 從產(chǎn)生式規(guī)則構(gòu)建內(nèi)部節(jié)點
- 5.5.1 訪問值棧上的樹節(jié)點
- 5.5.2 使用樹節(jié)點工廠方法
- 5.6 為Jzero語言形成語法樹
- 5.7 調(diào)試并測試語法樹
- 5.7.1 避免常見的語法樹錯誤
- 5.7.2 以文本格式輸出語法樹
- 5.7.3 使用dot輸出語法樹
- 5.8 本章小結(jié)
- 5.9 思考題
- 第二部分 語法樹遍歷
- 第6章 符號表
- 6.1 技術(shù)需求
- 6.2 建立符號表基礎(chǔ)
- 6.2.1 聲明和作用域
- 6.2.2 賦值和取消引用變量
- 6.2.3 選擇正確的樹遍歷
- 6.3 為每個作用域創(chuàng)建和填充符號表
- 6.3.1 向語法樹添加語義屬性
- 6.3.2 定義符號表和符號表條目的類
- 6.3.3 創(chuàng)建符號表
- 6.3.4 填充符號表
- 6.3.5 綜合isConst屬性
- 6.4 檢查未聲明的變量
- 6.4.1 識別方法體
- 6.4.2 發(fā)現(xiàn)方法體中變量的使用
- 6.5 查找重新聲明的變量
- 6.5.1 將符號插入符號表
- 6.5.2 報告語義錯誤
- 6.6 在Unicon中處理包和類作用域
- 6.6.1 名稱修飾
- 6.6.2 為成員變量引用插入self
- 6.6.3 在方法調(diào)用中插入self作為第一個參數(shù)
- 6.7 測試和調(diào)試符號表
- 6.8 本章小結(jié)
- 6.9 思考題
- 第7章 基本類型檢查
- 7.1 技術(shù)需求
- 7.2 編譯器中的類型表示
- 7.2.1 定義表示類型的基類
- 7.2.2 子類化復(fù)雜類型的基類
- 7.3 將類型信息分配給聲明的變量
- 7.3.1 從保留字合成類型
- 7.3.2 將類型繼承到變量列表中
- 7.4 確定每個語法樹節(jié)點的類型
- 7.4.1 確定葉子的類型
- 7.4.2 計算和檢查內(nèi)部節(jié)點的類型
- 7.5 Unicon中的運(yùn)行時類型檢查和類型推斷
- 7.6 本章小結(jié)
- 7.7 思考題
- 第8章 檢查數(shù)組、方法調(diào)用和結(jié)構(gòu)訪問的類型
- 8.1 技術(shù)需求
- 8.2 檢查數(shù)組類型的操作
- 8.2.1 處理數(shù)組變量聲明
- 8.2.2 在數(shù)組創(chuàng)建期間檢查類型
- 8.2.3 在數(shù)組訪問期間檢查類型
- 8.3 檢查方法調(diào)用
- 8.3.1 計算參數(shù)和返回類型信息
- 8.3.2 檢查每個方法調(diào)用站點的類型
- 8.3.3 檢查返回語句中的類型
- 8.4 檢查結(jié)構(gòu)化類型訪問
- 8.4.1 處理實例變量聲明
- 8.4.2 在創(chuàng)建實例時檢查類型
- 8.4.3 在實例訪問時檢查類型
- 8.5 本章小結(jié)
- 8.6 思考題
- 第9章 中間代碼生成
- 9.1 技術(shù)需求
- 9.2 準(zhǔn)備生成代碼
- 9.2.1 為什么要生成中間代碼
- 9.2.2 了解生成程序的存儲區(qū)域
- 9.2.3 為中間代碼引入數(shù)據(jù)類型
- 9.2.4 將中間代碼屬性添加到樹中
- 9.2.5 生成標(biāo)簽和臨時變量
- 9.3 中間代碼指令集
- 9.3.1 指令
- 9.3.2 聲明
- 9.4 用標(biāo)簽為控制流注釋語法樹
- 9.5 為表達(dá)式生成代碼
- 9.6 為控制流生成代碼
- 9.6.1 為條件表達(dá)式生成標(biāo)簽?zāi)繕?biāo)
- 9.6.2 生成循環(huán)代碼
- 9.6.3 為方法調(diào)用生成中間代碼
- 9.6.4 檢查生成的中間代碼
- 9.7 本章小結(jié)
- 第10章 IDE中的語法著色
- 10.1 下載本章中使用的示例IDE
- 10.2 將編譯器集成到程序員的編輯器中
- 10.2.1 從IDE中分析源代碼
- 10.2.2 將編譯器輸出發(fā)送到IDE
- 10.3 避免在每次更改時重新解析整個文件
- 10.4 使用詞法信息為標(biāo)記著色
- 10.4.1 擴(kuò)展EditableTextList組件以支持顏色
- 10.4.2 在繪制單個標(biāo)記時對其進(jìn)行著色
- 10.5 使用解析結(jié)果突出顯示錯誤
- 10.6 添加Java支持
- 10.7 本章小結(jié)
- 第三部分 代碼生成與運(yùn)行時系統(tǒng)
- 第11章 字節(jié)碼解釋器
- 11.1 技術(shù)需求
- 11.2 什么是字節(jié)碼
- 11.3 比較字節(jié)碼和中間碼
- 11.4 為Jzero構(gòu)建字節(jié)碼指令集
- 11.4.1 定義Jzero字節(jié)碼文件格式
- 11.4.2 了解棧機(jī)操作的基礎(chǔ)知識
- 11.5 實現(xiàn)字節(jié)碼解釋器
- 11.5.1 將字節(jié)碼加載到內(nèi)存中
- 11.5.2 初始化解釋器狀態(tài)
- 11.5.3 獲取指令并推進(jìn)指令指針
- 11.5.4 指令解碼
- 11.5.5 執(zhí)行指令
- 11.5.6 啟動Jzero解釋器
- 11.6 編寫Jzero運(yùn)行時系統(tǒng)
- 11.7 運(yùn)行Jzero程序
- 11.8 檢查Unicon字節(jié)碼解釋器iconx
- 11.8.1 了解目標(biāo)導(dǎo)向的字節(jié)碼
- 11.8.2 在運(yùn)行時保留類型信息
- 11.8.3 獲取、解碼和執(zhí)行指令
- 11.8.4 制作運(yùn)行時系統(tǒng)的其余部分
- 11.9 本章小結(jié)
- 11.10 思考題
- 第12章 生成字節(jié)碼
- 12.1 技術(shù)需求
- 12.2 轉(zhuǎn)換中間代碼為Jzero字節(jié)碼
- 12.2.1 為字節(jié)碼指令添加類
- 12.2.2 將中間代碼地址映射到字節(jié)碼地址
- 12.2.3 實現(xiàn)字節(jié)碼生成器方法
- 12.2.4 為簡單表達(dá)式生成字節(jié)碼
- 12.2.5 生成指針操作的代碼
- 12.2.6 為分支和條件分支生成字節(jié)碼
- 12.2.7 為方法調(diào)用和返回生成代碼
- 12.2.8 處理中間代碼中的標(biāo)簽和其他偽指令
- 12.3 比較字節(jié)碼匯編程序與二進(jìn)制格式
- 12.3.1 以匯編格式輸出字節(jié)碼
- 12.3.2 以二進(jìn)制格式輸出字節(jié)碼
- 12.4 鏈接、加載并包括運(yùn)行時系統(tǒng)
- 12.5 Unicon示例:icont中的字節(jié)碼生成
- 12.6 本章小結(jié)
- 12.7 思考題
- 第13章 生成本機(jī)代碼
- 13.1 技術(shù)需求
- 13.2 決定是否生成本機(jī)代碼
- 13.3 x64指令集
- 13.3.1 為x64指令添加類
- 13.3.2 將內(nèi)存區(qū)域映射到基于x64寄存器的地址模式
- 13.4 使用寄存器
- 13.4.1 從空策略開始
- 13.4.2 分配寄存器以加速本地區(qū)域
- 13.5 將中間代碼轉(zhuǎn)換為x64代碼
- 13.5.1 將中間代碼地址映射到x64內(nèi)存地址
- 13.5.2 實現(xiàn)x64代碼生成器方法
- 13.5.3 生成簡單表達(dá)式的x64代碼
- 13.5.4 生成指針操作的代碼
- 13.5.5 為分支和條件分支生成本機(jī)代碼
- 13.5.6 為方法調(diào)用和返回生成代碼
- 13.5.7 處理標(biāo)簽和偽指令
- 13.6 生成x64輸出
- 13.6.1 以匯編語言格式編寫x64代碼
- 13.6.2 從本機(jī)匯編程序到目標(biāo)文件
- 13.6.3 鏈接、加載并包括運(yùn)行時系統(tǒng)
- 13.7 本章小結(jié)
- 13.8 思考題
- 第14章 運(yùn)算符和內(nèi)置函數(shù)的實現(xiàn)
- 14.1 實現(xiàn)運(yùn)算符
- 14.1.1 運(yùn)算符是否需要硬件支持
- 14.1.2 在中間代碼生成中添加字符串連接
- 14.1.3 為字節(jié)碼解釋器添加字符串連接
- 14.1.4 將字符串連接添加到本機(jī)運(yùn)行時系統(tǒng)
- 14.2 編寫內(nèi)置函數(shù)
- 14.2.1 向字節(jié)碼解釋器添加內(nèi)置函數(shù)
- 14.2.2 編寫用于本機(jī)代碼實現(xiàn)的內(nèi)置函數(shù)
- 14.3 集成內(nèi)置組件與控制結(jié)構(gòu)
- 14.4 為Unicon開發(fā)運(yùn)算符和函數(shù)
- 14.4.1 在Unicon中編寫運(yùn)算符
- 14.4.2 開發(fā)Unicon的內(nèi)置函數(shù)
- 14.5 本章小結(jié)
- 14.6 思考題
- 第15章 域控制結(jié)構(gòu)
- 15.1 了解何時需要新的控制結(jié)構(gòu)
- 15.1.1 定義控制結(jié)構(gòu)
- 15.1.2 減少過多的冗余參數(shù)
- 15.2 Icon和Unicon中的字符串掃描
- 15.2.1 掃描環(huán)境及其基本操作
- 15.2.2 通過控制結(jié)構(gòu)消除過多參數(shù)
- 15.3 Unicon中的渲染區(qū)域
- 15.3.1 從顯示列表渲染3D圖形
- 15.3.2 使用內(nèi)置函數(shù)指定渲染區(qū)域
- 15.3.3 使用嵌套渲染區(qū)域更改圖形細(xì)節(jié)層次
- 15.3.4 創(chuàng)建渲染區(qū)域控制結(jié)構(gòu)
- 15.4 本章小結(jié)
- 15.5 思考題
- 第16章 垃圾收集
- 16.1 認(rèn)識垃圾收集的重要性
- 16.2 對象的引用計數(shù)
- 16.2.1 將引用計數(shù)添加到Jzero
- 16.2.2 生成堆分配代碼
- 16.2.3 為賦值運(yùn)算符修改生成的代碼
- 16.2.4 引用計數(shù)的缺點和局限性
- 16.3 標(biāo)記實時數(shù)據(jù)并清理剩余數(shù)據(jù)
- 16.3.1 組織堆內(nèi)存區(qū)域
- 16.3.2 遍歷基本變量以標(biāo)記實時數(shù)據(jù)
- 16.3.3 回收實時內(nèi)存并將其放入連續(xù)內(nèi)存塊
- 16.4 本章小結(jié)
- 16.5 思考題
- 第17章 結(jié)語
- 17.1 反思從編寫這本書中學(xué)到的東西
- 17.2 決定何去何從
- 17.2.1 學(xué)習(xí)編程語言設(shè)計
- 17.2.2 學(xué)習(xí)如何實現(xiàn)解釋器和字節(jié)碼機(jī)器
- 17.2.3 獲取代碼優(yōu)化方面的專業(yè)知識
- 17.2.4 監(jiān)視和調(diào)試程序執(zhí)行
- 17.2.5 設(shè)計和實現(xiàn)IDE和GUI構(gòu)建器
- 17.3 延伸閱讀的參考資料
- 17.4 本章小結(jié)
- 第四部分 附錄
- 附錄A Unicon基礎(chǔ)
- 附錄B 部分章節(jié)要點
- 作者簡介
- 封底 更新時間:2024-05-11 19:46:45