-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/14 新書到! 12/12 新書到! 12/5 新書到! 11/30 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

自制編程語言

( 簡體 字)
作者:[日] 前橋和彌類別:1. -> 程式設計 -> 綜合
譯者:劉卓,徐謙,吳雅明
出版社:人民郵電出版社自制編程語言 3dWoo書號: 37144
詢問書籍請說出此書號!

有庫存
NT售價: 395

出版日:12/1/2013
頁數:378
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787115333209
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

  《自制編程語言》手把手地教讀者用C語言制作兩種編程語言:crowbar與Diksam。crowbar是運行分析樹的無類型語言,Diksam是運行字節碼的靜態類型語言。這兩種語言都具備四則運算、變量、條件分支、循環、函數定義、垃圾回收等功能,最終版則可以支持面向對象、異常處理等高級機制。所有源代碼都提供下載,讀者可以一邊對照書中的說明一邊調試源代碼。這個過程對理解程序的運行機制十分有幫助。
  《自制編程語言》適合有一定基礎的程序員和編程語言愛好者閱讀。
目錄:

第1章 引子 001
1.1 為什么要制作編程語言 002
1.2 自制編程語言并不是很難 003
1.3 本書的構成與面向讀者 004
1.4 用什么語言來制作 006
1.5 要制作怎樣的語言 007
1.5.1 要設計怎樣的語法 007
1.5.2 要設計怎樣的運行方式 009
補充知識 “用戶”指的是誰? 012
補充知識 解釋器并不會進行翻譯 012
1.6 環境搭建 012
1.6.1 搭建開發環境 012
補充知識 關于bison與flex的安裝 014
1.6.2 本書涉及的源代碼以及編譯器 015

第2章 試做一個計算器 017
2.1 yacc/lex是什么 018
補充知識 詞法分析器與解析器是各自獨立的 019
2.2 試做一個計算器 020
2.2.1 lex 021
2.2.2 簡單正則表達式講座 024
2.2.3 yacc 026
2.2.4 生成執行文件 033
2.2.5 理解沖突所代表的含義 034
2.2.6 錯誤處理 040
2.3 不借助工具編寫計算器 041
2.3.1 自制詞法分析器 041
補充知識 保留字(關鍵字) 046
補充知識 避免重復包含 047
2.3.2 自制語法分析器 048
補充知識 預讀記號的處理 053
2.4 少許理論知識——LL(1)與LALR(1) 054
補充知識 Pascal/C中的語法處理訣竅 056
2.5 習題:擴展計算器 056
2.5.1 讓計算器支持括號 056
2.5.2 讓計算器支持負數 058

第3章 制作無類型語言crowbar 061
3.1 制作crowbar ver.0.1語言的基礎部分 062
3.1.1 crowbar是什么 062
3.1.2 程序的結構 063
3.1.3 數據類型 064
3.1.4 變量 064
補充知識 初次賦值兼做變量聲明的理由 066
補充說明 各種語言的全局變量處理 067
3.1.5 語句與結構控制 067
補充知識 elif、elsif、elseif的選擇 068
3.1.6 語句與運算符 069
3.1.7 內置函數 069
3.1.8 讓crowbar支持C語言調用 070
3.1.9 從crowbar中調用C語言(內置函數的編寫) 071
3.2 預先準備 071
3.2.1 模塊與命名規則 072
3.2.2 內存管理模塊MEM 073
補充知識 valgrind 075
補充知識 富翁式編程 075
補充知識 符號表與扣留操作 076
3.2.3 調試模塊DBG 076
3.3 crowbar ver.0.1的實現 077
3.3.1 crowbar的解釋器——CRB_Interpreter 077
補充知識 不完全類型 080
3.3.2 詞法分析——crowbar.l 081
補充知識 靜態變量的許可范圍 084
3.3.3 分析樹的構建——crowbar.y與create.c 085
3.3.4 常量折疊 089
3.3.5 錯誤信息 089
補充知識 關于crowbar中使用的枚舉型定義 091
3.3.6 運行——execute.c 092
3.3.7 表達式評估——eval.c 096
3.3.8 值——CRB_Value 104
3.3.9 原生指針型 105
3.3.10 變量 106
3.3.11 字符串與垃圾回收機制——string_pool.c 108
3.3.12 編譯與運行 110

第4章 數組和mark-sweep垃圾回收器 113
4.1 crowbar ver.0.2 114
4.1.1 crowbar的數組 114
4.1.2 訪問數組元素 115
4.1.3 數組是一種引用類型 116
補充知識 “數組的數組”和多維數組 116
4.1.4 為數組添加元素 118
4.1.5 增加(模擬)函數調用功能 118
4.1.6 其他細節 118
4.2 制作mark-sweep GC 119
4.2.1 引用數據類型的結構 119
4.2.2 mark-sweep GC 121
補充知識 引用和immutable 123
4.2.3 crowbar棧 124
4.2.4 其他根 127
4.2.5 原生函數的形式參數 128
4.3 實現GC本身 129
4.3.1 對象的管理方法 129
4.3.2 GC何時啟動 129
4.3.3 sweep階段 132
補充知識 GC現存的問題 133
補充知識 Coping GC 134
4.4 其他修改 136
4.4.1 修改語法 136
4.4.2 函數的模擬 137
4.4.3 左值的處理 139
4.4.4 創建數組和原生函數的書寫方法 142
4.4.5 原生指針類型的修改 144

第5章 中文支持和Unicode 147
5.1 中文支持策略和基礎知識 148
5.1.1 現存問題 148
5.1.2 寬字符(雙字節)串和多字節字符串 149
補充知識 wchar_t肯定能表示1個字符嗎? 150
5.1.3 多字節字符/寬字符之間的轉換函數群 150
5.2 Unicode 153
5.2.1 Unicode的歷史 153
5.2.2 Unicode的編碼方式 154
補充知識 Unicode可以固定(字節)長度嗎? 156
5.3 crowbar book_ver.0.3的實現 156
5.3.1 要實現到什么程度? 156
5.3.2 發起轉換的時機 157
5.3.3 關于區域設置 158
5.3.4 解決0x5C問題 158
補充知識 失敗的#ifdef 160
5.3.5 應該是什么樣子 160
補充知識 還可以是別的樣子——Code Set Independent 161

第6章 制作靜態類型的語言Diksam 163
6.1 制作Diksam Ver 0.1語言的基本部分 164
6.1.1 Diksam的運行狀態 164
6.1.2 什么是Diksam 165
6.1.3 程序結構 165
6.1.4 數據類型 166
6.1.5 變量 166
6.1.6 語句和流程控制 167
6.1.7 表達式 167
6.1.8 內建函數 168
6.1.9 其他 168
6.2 什么是靜態的/執行字節碼的語言 169
6.2.1 靜態類型的語言 169
6.2.2 什么是字節碼 169
6.2.3 將表達式轉換為字節碼 170
6.2.4 將控制結構轉換為字節碼 173
6.2.5 函數的實現 173
6.3 Diksam ver.0.1的實現——編譯篇 175
6.3.1 目錄結構 175
6.3.2 編譯的概要 176
6.3.3 構建分析樹(create.c) 176
6.3.4 修正分析樹(fix_tree.c) 179
6.3.5 Diksam的運行形式——DVM_Executable 185
6.3.6 常量池 186
補充知識 YARV的情況 187
6.3.7 全局變量 188
6.3.8 函數 189
6.3.9 頂層結構的字節碼 189
6.3.10 行號對應表 190
6.3.11 棧的需要量 190
6.3.12 生成字節碼(generate.c) 191
6.3.13 生成實際的編碼 193
6.4 Diksam虛擬機 197
6.4.1 加載/鏈接DVM_Executable到DVM 200
6.4.2 執行——巨大的switch case 202
6.4.3 函數調用 204

第7章 為Diksam引入數組 207
7.1 Diksam中數組的設計 208
7.1.1 聲明數組類型的變量 208
7.1.2 數組常量 209
補充知識 D語言的數組 210
7.2 修改編譯器 210
7.2.1 數組的語法規則 210
7.2.2 TypeSpecifier結構體 212
7.3 修改DVM 213
7.3.1 增加指令 213
補充知識 創建Java的數組常量 215
補充知識 C語言中數組的初始化 217
7.3.2 對象 217
補充知識 ArrayStoreException 218
7.3.3 增加null 219
7.3.4 哎!還缺點什么吧? 219

第8章 將類引入Diksam 221
8.1 分割源文件 222
8.1.1 包和分割源代碼 222
補充知識 #include、文件名、行號 225
8.1.2 DVM_ExecutableList 225
8.1.3 ExecutableEntry 226
8.1.4 分開編譯源代碼 227
8.1.5 加載和再鏈接 230
補充知識 動態加載時的編譯器 233
8.2 設計Diksam中的類 233
8.2.1 超簡單的面向對象入門 233
8.2.2 類的定義和實例創建 237
8.2.3 繼承 239
8.2.4 關于接口 241
8.2.5 編譯與接口 242
8.2.6 Diksam怎么會設計成這樣? 243
8.2.7 數組和字符串的方法 245
8.2.8 檢查類的類型 246
8.2.9 向下轉型 246
8.3 關于類的實現——繼承和多態 247
8.3.1 字段的內存布局 247
8.3.2 多態——以單繼承為前提 249
8.3.3 多繼承——C++ 250
8.3.4 Diksam的多繼承 252
補充知識 無類型語言中的繼承 254
8.3.5 重寫的條件 254
8.4 關于類的實現 256
8.4.1 語法規則 256
8.4.2 編譯時的數據結構 258
8.4.3 DVM_Executable中的數據結構 260
8.4.4 與類有關的指令 262
補充知識 方法調用、括號和方法指針 263
8.4.5 方法調用 264
8.4.6 super 266
8.4.7 類的鏈接 266
8.4.8 實現數組和字符串的方法 267
8.4.9 類型檢查和向下轉型 267
補充知識 對象終結器(finalizer)和析構函數(destructor) 268

第9章 應用篇 271
9.1 為crowbar引入對象和閉包 272
9.1.1 crowbar的對象 272
9.1.2 對象實現 273
9.1.3 閉包 274
9.1.4 方法 276
9.1.5 閉包的實現 278
9.1.6 試著跟蹤程序實際執行時的軌跡 281
9.1.7 閉包的語法規則 284
9.1.8 普通函數 284
9.1.9 模擬方法(修改版) 285
9.1.10 基于原型的面向對象 286
9.2 異常處理機制 286
9.2.1 為crowbar引入異常 286
9.2.2 setjmp()/longjmp() 289
補充知識 Java和C#異常處理的不同 293
9.2.3 為Diksam引入異常 295
補充知識 catch的編寫方法 296
9.2.4 異常的數據結構 297
9.2.5 異常處理時生成的字節碼299
9.2.6 受查異常 301
補充知識 受查異常的是與非 303
補充知識 異常處理本身的是與非 304
9.3 構建腳本 305
9.3.1 基本思路 306
9.3.2 YY_INPUT 307
9.3.3 Diksam的構建腳本 308
9.3.4 三次加載/鏈接 308
9.4 為crowbar引入鬼車 309
9.4.1 關于“鬼車” 309
9.4.2 正則表達式常量 310
9.4.3 正則表達式的相關函數 311
9.5 其他 312
9.5.1 foreach和迭代器(crowbar) 312
9.5.2 switch case(Diksam) 314
9.5.3 enum(Diksam) 315
9.5.4 delegate(Diksam) 316
9.5.5 final、const(Diksam) 319

附錄A crowbar語言的設計 322
附錄B Diksam語言的設計 336
附錄C Diksam Virtual Machine指令集 359

編程語言實用化指南——寫在最后 369
參考文獻 375
序: