幫助中心 | 我的帳號 | 關於我們

編譯器之旅(打造自己的編程語言微課視頻版)/電腦技術開發與應用叢書

  • 作者:于東亮|責編:趙佳霓
  • 出版社:清華大學
  • ISBN:9787302667223
  • 出版日期:2024/08/01
  • 裝幀:平裝
  • 頁數:242
人民幣:RMB 59 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書以簡單的演算法、清晰的架構講述了把高級語言轉換成Linux程序的全過程,以及其中蘊含的數學原理。
    本書共12章,按照源碼編譯的順序分為入門篇和進階篇。入門篇(第1?4章)詳細介紹詞法分析、語法分析、語義分析,涵蓋編譯器前端的所有內容。進階篇(第5?12章)進一步說明怎麼把抽象語法樹轉換成可執行程序的全過程,包含三地址碼的生成、中間代碼優化、寄存器分配、機器碼的生成、ELF文件格式、連接器和虛擬機的實現,以及作者對泛編譯器問題的進一步思考。
    本書適合初學者學習編譯原理,也可用作資深程序員在開發一門新語言時的技術資料,還可用作高等院校和培訓機構的教學參考書。

作者介紹
于東亮|責編:趙佳霓
    于東亮,SCF編譯器作者,資深C程序員和FFmpeg工程師,畢業於天津大學,長期從事Linux下的編程工作。先後製作了「C語言技術內幕」「Linux環境的編程詳解」「怎麼用C語言寫一個簡單EDA」「編譯器入門」等原創視頻合集。本書為作者的第一部實體書,以SCF編譯器為例講述了一門高級語言的開發過程。

目錄
入門篇
  第1章  編譯器簡介
    1.1  編程語言的發展史
    1.2  編譯器在IT行業里的核心地位
    1.3  編譯器的代碼架構
  第2章  詞法分析
    2.1  「理想語言」的詞法分析
    2.2  實際編程語言的詞法擴展
      2.2.1  編程語言的標誌符
      2.2.2  關鍵字
      2.2.3  數字
      2.2.4  數據結構
    2.3  詞法分析的數學解釋
  第3章  語法分析
    3.1  語句類型的劃分
    3.2  語句的嵌套和遞歸分析
      3.2.1  變數聲明語句的分析
      3.2.2  類型定義語句的分析
      3.2.3  順序塊的分析
      3.2.4  表達式的分析
      3.2.5  運算符的優先順序和結合性
      3.2.6  表達式樹的構造步驟
      3.2.7  完整的抽象語法樹
      3.2.8  抽象語法樹的數據結構
      3.2.9  變數和類型的數據結構
      3.2.10  變數的諸法檢查
      3.2.11  屋號和乘法的區分
    3.3  語法的靈活編輯和有限自動機框梁
      3.3.1  有限自動機的簡介
      3.3.2  語法的編輯
      3.3.3  編程語言的語法圖
      3.3.4  SCF框架怎麼實現「遞歸」
      3.3.5  語法分析框架的模塊上下文
      3.3.6  for循環的語法分析模塊
      3.3.7  小括弧的多種含義
    3.4  語法分析的數學解釋
  第4章  語義分析
    4.1  類型檢查
    4.2  語義分析框架
      4.2.1  語義分析的回調函數
      4.2.2  語義分析中的遞歸
    4.3  運算符重載
      4.3.1  運算符重載的實現
      4.3.2  函數調用
      4.3.3  重載函數的查找
      4.3.4  代碼實現
      4.3.5  SCF編譯器的類對象
    4.4  new關鍵字
    4.5  多值函數
      4.5.1  應用程序二進位介面

      4.5.2  語法層面的支持
      4.5.3  語義層面的支持
進階篇
  第5章  三地址碼的生成
    5.1  回填技術
      5.1.1  回填的數據結構
      5.1.2  三地址碼的數據結構
      5.1.3  回填的步驟
    5.2  if-else的三地址碼
    5.3  循環的入口和出口
    5.4  指針與數組的賦值
    5.5  new關鍵字的三地址碼
    5.6  跳轉的優化
      5.6.1  跳轉的優化簡介
      5.6.2  邏輯運算符的短路優化
      5.6.3  死代碼消除
      5.6.4  代碼實現
  第6章  基本塊的劃分
    6.1  比較、跳轉導致的基本塊劃分
    6.2  函數調用
    6.3  基本塊的流程圖
  第7章  中間代碼優化
    7.1  代碼框架
    7.2  內聯函數
    7.3  有向無環圖
      7.3.1  公共子表達式
      7.3.2  數據結構
      7.3.3  有向無環圖的生成
    7.4  圖的搜索演算法
      7.4.1  基本塊的數據結構
      7.4.2  寬度優先搜索
      7.4.3  深度優先搜索
    7.5  指針分析
      7.5.1  指針解引用的分析
      7.5.2  數組和結構體的指針分析
    7.6  跨函數的指針分析
    7.7  變數活躍度分析
      7.7.1  變數的活躍度
      7.7.2  單個基本塊的變數活躍度分析
      7.7.3  基本塊流程圖上的分析
      7.7.4  代碼實現
    7.8  自動內存管理
    7.9  DAG優化
      7.9.1  無效運算
      7.9.2  相同子表達式的判斷
      7.9.3  出口活躍變數的優化
      7.9.4  后十十的優化
      7.9.5  邏輯運算符的優化
      7.9.6  DAG優化的代碼實現
    7.10  循環分析

      7.10.1  循環的識別
      7.10.2  循環的優化
  第8章  寄存器分配
    8.1  不同CPU架構的寄存器組
    8.2  變數之間的衝突
    8.3  圖的著色演算法
      8.3.1  簡單著色演算法
      8.3.2  改進的著色演算法
  第9章  機器碼的生成
    9.1  RISC架構的優勢
    9.2  寄存器溢出
      9.2.1  寄存器的數據結構
      9.2.2  寄存器的衝突
      9.2.3  寄存器的溢出
    9.3  X86 64的機器碼生成
      9.3.1  X86_64的機器指令
      9.3.2  機器碼的生成
      9.3.3  目標文件
    9.4  ARM64的機器碼生成
      9.4.1  指令特點
      9.4.2  機器碼生成
  第10章  ELF格式和可執行程序的連接
    10.1  ELF格式
      10.1.1  文件頭
      10.1.2  節頭表
      10.1.3  程序頭表
      10.1.4  ELF格式的實現
    10.2  連接器
      10.2.1  連接
      10.2.2  靜態連接
      10.2.3  動態連接
      10.2.4  編譯器的主流程
    10.3  可執行文件的運行
      10.3.1  進程創建
      10.3.2  程序的載入和運行
      10.3.3  動態庫函數的載入
      10.3.4  源代碼的編譯、連接、運行
  第11章  Naja位元組碼和虛擬機
    11.1  Naja位元組碼
    11.2  虛擬機
      11.2.1  虛擬機的數據結構
      11.2.2  虛擬機的運行
      11.2.3  動態庫函數的載入
  第12章  信息編碼的數學哲學
    12.1  信息編碼格式的轉換
    12.2  多項式時間的演算法
    12.3  自然指數e和梯度下降演算法
    12.4  複雜問題的簡單解法

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032