注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)其他編程語(yǔ)言/工具自制編程語(yǔ)言

自制編程語(yǔ)言

自制編程語(yǔ)言

定 價(jià):¥79.00

作 者: 前橋和彌 著,劉卓,徐謙,吳雅明 譯
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 程序設(shè)計(jì) 計(jì)算機(jī)/網(wǎng)絡(luò)

購(gòu)買(mǎi)這本書(shū)可以去


ISBN: 9787115333209 出版時(shí)間: 2013-11-30 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 396 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《自制編程語(yǔ)言》手把手地教讀者用C語(yǔ)言制作兩種編程語(yǔ)言:crowbar與Diksam。crowbar是運(yùn)行分析樹(shù)的無(wú)類型語(yǔ)言,Diksam是運(yùn)行字節(jié)碼的靜態(tài)類型語(yǔ)言。這兩種語(yǔ)言都具備四則運(yùn)算、變量、條件分支、循環(huán)、函數(shù)定義、垃圾回收等功能,最終版則可以支持面向?qū)ο?、異常處理等高?jí)機(jī)制。所有源代碼都提供下載,讀者可以一邊對(duì)照書(shū)中的說(shuō)明一邊調(diào)試源代碼。這個(gè)過(guò)程對(duì)理解程序的運(yùn)行機(jī)制十分有幫助。

作者簡(jiǎn)介

  前橋和彌(Maebasi Kazuya),1969年出生,著有《征服C指針》、《徹底掌握C語(yǔ)言》、《Java之謎和陷阱》等。其一針見(jiàn)血的“毒舌”文風(fēng)和對(duì)編程語(yǔ)言深刻的見(jiàn)地受到廣大讀者的歡迎。譯者簡(jiǎn)介:劉卓,2004年開(kāi)始從事對(duì)日軟件開(kāi)發(fā)工作,其間還從事技術(shù)及軟件工程相關(guān)培訓(xùn)工作。自2011年開(kāi)始從事電力行業(yè)產(chǎn)品研發(fā)。持續(xù)關(guān)注企業(yè)級(jí)應(yīng)用架構(gòu)和Web客戶端技術(shù)。徐謙,6年技術(shù)開(kāi)發(fā)及項(xiàng)目經(jīng)驗(yàn),曾以技術(shù)工程師身份赴日本工作兩年,后歸國(guó)聯(lián)合創(chuàng)辦互聯(lián)網(wǎng)公司,現(xiàn)居上海繼續(xù)創(chuàng)業(yè)中。主要從事PHP方向的Web開(kāi)發(fā)。熱愛(ài)開(kāi)源,曾向Zend Framework等知名PHP開(kāi)源項(xiàng)目貢獻(xiàn)代碼,并于Github自主研發(fā)運(yùn)維EvaThumber等開(kāi)源項(xiàng)目獲得國(guó)內(nèi)社區(qū)認(rèn)可。樂(lè)于分享技術(shù)心得,個(gè)人技術(shù)博客avnpc.com在國(guó)內(nèi)PHP圈小有影響。吳雅明,13年編程經(jīng)驗(yàn)。其中7年專注于研發(fā)基于Java EE和.NET的開(kāi)發(fā)框架以及基于UML 2.0模型的代碼生成工具。目前正帶領(lǐng)團(tuán)隊(duì)開(kāi)發(fā)云計(jì)算PaaS平臺(tái)及云計(jì)算自動(dòng)化配置部署的系統(tǒng)。譯著有《征服C指針》等。

圖書(shū)目錄


第1章  引子  001
1.1 為什么要制作編程語(yǔ)言  002
1.2 自制編程語(yǔ)言并不是很難  003
1.3 本書(shū)的構(gòu)成與面向讀者  004
1.4 用什么語(yǔ)言來(lái)制作  006
1.5 要制作怎樣的語(yǔ)言  007
1.5.1 要設(shè)計(jì)怎樣的語(yǔ)法  007
1.5.2 要設(shè)計(jì)怎樣的運(yùn)行方式  009
補(bǔ)充知識(shí)  “用戶”指的是誰(shuí)?  012
補(bǔ)充知識(shí)  解釋器并不會(huì)進(jìn)行翻譯  012
1.6 環(huán)境搭建  012
1.6.1 搭建開(kāi)發(fā)環(huán)境  012
補(bǔ)充知識(shí) 關(guān)于bison與flex的安裝  014
1.6.2 本書(shū)涉及的源代碼以及編譯器  015
第2章  試做一個(gè)計(jì)算器  017
2.1 yacc/lex是什么  018
補(bǔ)充知識(shí)  詞法分析器與解析器是各自獨(dú)立的  019
2.2 試做一個(gè)計(jì)算器  020
2.2.1 lex  021
2.2.2 簡(jiǎn)單正則表達(dá)式講座  024
2.2.3 yacc  026
2.2.4 生成執(zhí)行文件  033
2.2.5 理解沖突所代表的含義  034
2.2.6 錯(cuò)誤處理  040
2.3 不借助工具編寫(xiě)計(jì)算器  041
2.3.1 自制詞法分析器  041
補(bǔ)充知識(shí)  保留字(關(guān)鍵字)  046
補(bǔ)充知識(shí) 避免重復(fù)包含  047
2.3.2 自制語(yǔ)法分析器  048
補(bǔ)充知識(shí) 預(yù)讀記號(hào)的處理  053
2.4 少許理論知識(shí)——LL(1)與LALR(1)  054
補(bǔ)充知識(shí) Pascal/C 中的語(yǔ)法處理訣竅  056
2.5 習(xí)題:擴(kuò)展計(jì)算器  056
2.5.1 讓計(jì)算器支持括號(hào)  056
2.5.2 讓計(jì)算器支持負(fù)數(shù)  058
第3章  制作無(wú)類型語(yǔ)言crowbar  061
3.1 制作crowbar ver.0.1語(yǔ)言的基礎(chǔ)部分  062
3.1.1 crowbar是什么  062
3.1.2 程序的結(jié)構(gòu)  063
3.1.3 數(shù)據(jù)類型  064
3.1.4 變量  064
補(bǔ)充知識(shí) 初次賦值兼做變量聲明的理由  066
補(bǔ)充說(shuō)明 各種語(yǔ)言的全局變量處理  067
3.1.5 語(yǔ)句與結(jié)構(gòu)控制  067
補(bǔ)充知識(shí) elif、elsif、elseif的選擇  068
3.1.6 語(yǔ)句與運(yùn)算符  069
3.1.7 內(nèi)置函數(shù)  069
3.1.8 讓crowbar支持C 語(yǔ)言調(diào)用  070
3.1.9 從crowbar中調(diào)用C 語(yǔ)言(內(nèi)置函數(shù)的編寫(xiě))  071
3.2 預(yù)先準(zhǔn)備  071
3.2.1 模塊與命名規(guī)則  072
3.2.2 內(nèi)存管理模塊MEM  073
補(bǔ)充知識(shí) valgrind  075
補(bǔ)充知識(shí) 富翁式編程  075
補(bǔ)充知識(shí) 符號(hào)表與扣留操作  076
3.2.3 調(diào)試模塊DBG  076
3.3 crowbar ver.0.1的實(shí)現(xiàn)  077
3.3.1 crowbar的解釋器——CRB_Interpreter  077
補(bǔ)充知識(shí) 不完全類型  080
3.3.2 詞法分析——crowbar.l  081
補(bǔ)充知識(shí) 靜態(tài)變量的許可范圍  084
3.3.3 分析樹(shù)的構(gòu)建——crowbar.y 與create.c  085
3.3.4 常量折疊  089
3.3.5 錯(cuò)誤信息  089
補(bǔ)充知識(shí) 關(guān)于crowbar中使用的枚舉型定義  091
3.3.6 運(yùn)行——execute.c  092
3.3.7 表達(dá)式評(píng)估——eval.c  096
3.3.8 值——CRB_Value  104
3.3.9 原生指針型  105
3.3.10 變量  106
3.3.11 字符串與垃圾回收機(jī)制——string_pool.c  108
3.3.12 編譯與運(yùn)行  110
第4章  數(shù)組和mark-sweep垃圾回收器  113
4.1 crowbar ver.0.2  114
4.1.1 crowbar的數(shù)組  114
4.1.2 訪問(wèn)數(shù)組元素  115
4.1.3 數(shù)組是一種引用類型  116
補(bǔ)充知識(shí)  “數(shù)組的數(shù)組”和多維數(shù)組  116
4.1.4 為數(shù)組添加元素  118
4.1.5 增加( 模擬) 函數(shù)調(diào)用功能  118
4.1.6 其他細(xì)節(jié)  118
4.2 制作mark-sweep GC  119
4.2.1 引用數(shù)據(jù)類型的結(jié)構(gòu)  119
4.2.2 mark-sweep GC  121
補(bǔ)充知識(shí) 引用和immutable  123
4.2.3 crowbar?! ?24
4.2.4 其他根  127
4.2.5 原生函數(shù)的形式參數(shù)  128
4.3 實(shí)現(xiàn)GC 本身  129
4.3.1 對(duì)象的管理方法  129
4.3.2 GC 何時(shí)啟動(dòng)  129
4.3.3 sweep階段  132
補(bǔ)充知識(shí) GC 現(xiàn)存的問(wèn)題  133
補(bǔ)充知識(shí) Coping GC  134
4.4 其他修改  136
4.4.1 修改語(yǔ)法  136
4.4.2 函數(shù)的模擬  137
4.4.3 左值的處理  139
4.4.4 創(chuàng)建數(shù)組和原生函數(shù)的書(shū)寫(xiě)方法  142
4.4.5 原生指針類型的修改  144
第5章  中文支持和Unicode  147
5.1 中文支持策略和基礎(chǔ)知識(shí)  148
5.1.1 現(xiàn)存問(wèn)題  148
5.1.2 寬字符(雙字節(jié))串和多字節(jié)字符串  149
補(bǔ)充知識(shí) wchar_t 肯定能表示1 個(gè)字符嗎?  150
5.1.3 多字節(jié)字符/ 寬字符之間的轉(zhuǎn)換函數(shù)群  150
5.2 Unicode  153
5.2.1 Unicode的歷史  153
5.2.2 Unicode的編碼方式  154
補(bǔ)充知識(shí) Unicode可以固定(字節(jié))長(zhǎng)度嗎?  156
5.3 crowbar book_ver.0.3的實(shí)現(xiàn)  156
5.3.1 要實(shí)現(xiàn)到什么程度?  156
5.3.2 發(fā)起轉(zhuǎn)換的時(shí)機(jī)  157
5.3.3 關(guān)于區(qū)域設(shè)置  158
5.3.4 解決0x5C問(wèn)題  158
補(bǔ)充知識(shí) 失敗的 #ifdef  160
5.3.5 應(yīng)該是什么樣子  160
補(bǔ)充知識(shí) 還可以是別的樣子——Code Set Independent  161
第6章  制作靜態(tài)類型的語(yǔ)言Diksam  163
6.1 制作Diksam Ver 0.1語(yǔ)言的基本部分  164
6.1.1 Diksam的運(yùn)行狀態(tài)  164
6.1.2 什么是Diksam  165
6.1.3 程序結(jié)構(gòu)  165
6.1.4 數(shù)據(jù)類型  166
6.1.5 變量  166
6.1.6 語(yǔ)句和流程控制  167
6.1.7 表達(dá)式  167
6.1.8 內(nèi)建函數(shù)  168
6.1.9 其他  168
6.2 什么是靜態(tài)的/ 執(zhí)行字節(jié)碼的語(yǔ)言  169
6.2.1 靜態(tài)類型的語(yǔ)言  169
6.2.2 什么是字節(jié)碼  169
6.2.3 將表達(dá)式轉(zhuǎn)換為字節(jié)碼  170
6.2.4 將控制結(jié)構(gòu)轉(zhuǎn)換為字節(jié)碼  173
6.2.5 函數(shù)的實(shí)現(xiàn)  173
6.3 Diksam ver.0.1的實(shí)現(xiàn)——編譯篇  175
6.3.1 目錄結(jié)構(gòu)  175
6.3.2 編譯的概要  176
6.3.3 構(gòu)建分析樹(shù)(create.c)  176
6.3.4 修正分析樹(shù)(fix_tree.c)  179
6.3.5 Diksam的運(yùn)行形式——DVM_Executable  185
6.3.6 常量池  186
補(bǔ)充知識(shí) YARV 的情況  187
6.3.7 全局變量  188
6.3.8 函數(shù)  189
6.3.9 頂層結(jié)構(gòu)的字節(jié)碼  189
6.3.10 行號(hào)對(duì)應(yīng)表  190
6.3.11 棧的需要量  190
6.3.12 生成字節(jié)碼(generate.c)  191
6.3.13 生成實(shí)際的編碼  193
6.4 Diksam虛擬機(jī)  197
6.4.1 加載/ 鏈接DVM_Executable到DVM  200
6.4.2 執(zhí)行——巨大的switch case  202
6.4.3 函數(shù)調(diào)用  204
第7章  為Diksam引入數(shù)組  207
7.1 Diksam中數(shù)組的設(shè)計(jì)  208
7.1.1 聲明數(shù)組類型的變量  208
7.1.2 數(shù)組常量  209
補(bǔ)充知識(shí) D 語(yǔ)言的數(shù)組  210
7.2 修改編譯器  210
7.2.1 數(shù)組的語(yǔ)法規(guī)則  210
7.2.2 TypeSpecifier結(jié)構(gòu)體  212
7.3 修改DVM  213
7.3.1 增加指令  213
補(bǔ)充知識(shí) 創(chuàng)建Java 的數(shù)組常量  215
補(bǔ)充知識(shí) C 語(yǔ)言中數(shù)組的初始化  217
7.3.2 對(duì)象  217
補(bǔ)充知識(shí) ArrayStoreException  218
7.3.3 增加null  219
7.3.4 哎! 還缺點(diǎn)什么吧?  219
第8章  將類引入Diksam  221
8.1 分割源文件  222
8.1.1 包和分割源代碼  222
補(bǔ)充知識(shí) #include、文件名、行號(hào)  225
8.1.2 DVM_ExecutableList  225
8.1.3 ExecutableEntry  226
8.1.4 分開(kāi)編譯源代碼  227
8.1.5 加載和再鏈接  230
補(bǔ)充知識(shí) 動(dòng)態(tài)加載時(shí)的編譯器  233
8.2 設(shè)計(jì)Diksam中的類  233
8.2.1 超簡(jiǎn)單的面向?qū)ο笕腴T(mén)  233
8.2.2 類的定義和實(shí)例創(chuàng)建  237
8.2.3 繼承  239
8.2.4 關(guān)于接口  241
8.2.5 編譯與接口  242
8.2.6 Diksam怎么會(huì)設(shè)計(jì)成這樣?  243
8.2.7 數(shù)組和字符串的方法  245
8.2.8 檢查類的類型  246
8.2.9 向下轉(zhuǎn)型  246
8.3 關(guān)于類的實(shí)現(xiàn)——繼承和多態(tài)  247
8.3.1 字段的內(nèi)存布局  247
8.3.2 多態(tài)——以單繼承為前提  249
8.3.3 多繼承——C++  250
8.3.4 Diksam的多繼承  252
補(bǔ)充知識(shí) 無(wú)類型語(yǔ)言中的繼承  254
8.3.5 重寫(xiě)的條件  254
8.4 關(guān)于類的實(shí)現(xiàn)  256
8.4.1 語(yǔ)法規(guī)則  256
8.4.2 編譯時(shí)的數(shù)據(jù)結(jié)構(gòu)  258
8.4.3 DVM_Executable中的數(shù)據(jù)結(jié)構(gòu)  260
8.4.4 與類有關(guān)的指令  262
補(bǔ)充知識(shí) 方法調(diào)用、括號(hào)和方法指針  263
8.4.5 方法調(diào)用  264
8.4.6 super  266
8.4.7 類的鏈接  266
8.4.8 實(shí)現(xiàn)數(shù)組和字符串的方法  267
8.4.9 類型檢查和向下轉(zhuǎn)型  267
補(bǔ)充知識(shí) 對(duì)象終結(jié)器(finalizer)和析構(gòu)函數(shù)(destructor)  268
第9章  應(yīng)用篇  271
9.1 為crowbar引入對(duì)象和閉包  272
9.1.1 crowbar的對(duì)象  272
9.1.2 對(duì)象實(shí)現(xiàn)  273
9.1.3 閉包  274
9.1.4 方法  276
9.1.5 閉包的實(shí)現(xiàn)  278
9.1.6 試著跟蹤程序?qū)嶋H執(zhí)行時(shí)的軌跡  281
9.1.7 閉包的語(yǔ)法規(guī)則  284
9.1.8 普通函數(shù)  284
9.1.9 模擬方法(修改版)  285
9.1.10 基于原型的面向?qū)ο蟆 ?86
9.2 異常處理機(jī)制  286
9.2.1 為crowbar引入異?! ?86
9.2.2 setjmp()/longjmp()  289
補(bǔ)充知識(shí) Java 和C# 異常處理的不同  293
9.2.3 為Diksam引入異?! ?95
補(bǔ)充知識(shí) catch 的編寫(xiě)方法  296
9.2.4 異常的數(shù)據(jù)結(jié)構(gòu)  297
9.2.5 異常處理時(shí)生成的字節(jié)碼299
9.2.6 受查異常  301
補(bǔ)充知識(shí) 受查異常的是與非 303
補(bǔ)充知識(shí) 異常處理本身的是與非  304
9.3 構(gòu)建腳本  305
9.3.1 基本思路  306
9.3.2 YY_INPUT  307
9.3.3 Diksam的構(gòu)建腳本  308
9.3.4 三次加載/ 鏈接  308
9.4 為crowbar引入鬼車  309
9.4.1 關(guān)于“鬼車”  309
9.4.2 正則表達(dá)式常量  310
9.4.3 正則表達(dá)式的相關(guān)函數(shù)  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語(yǔ)言的設(shè)計(jì)  322
附錄B  Diksam語(yǔ)言的設(shè)計(jì)  336
附錄C  Diksam Virtual Machine 指令集  359
編程語(yǔ)言實(shí)用化指南——寫(xiě)在最后  369
參考文獻(xiàn)  375

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)