最近在手搓紅黑樹時(shí)遇到一個(gè)問(wèn)題:類模板的派生類使用智能指針時(shí)的向下轉(zhuǎn)換錯(cuò)誤,總之,經(jīng)過(guò)一番研究,智能指針無(wú)法實(shí)現(xiàn)類模板指針的向下轉(zhuǎn)換,最終還是用裸指針手動(dòng)管理內(nèi)存更加靈活。 ...
最近在手搓紅黑樹時(shí)遇到一個(gè)問(wèn)題:類模板的派生類使用智能指針時(shí)的向下轉(zhuǎn)換錯(cuò)誤,總之,經(jīng)過(guò)一番研究,智能指針無(wú)法實(shí)現(xiàn)類模板指針的向下轉(zhuǎn)換,最終還是用裸指針手動(dòng)管理內(nèi)存更加靈活。 ...
在上一章中,我們完成了一個(gè)符號(hào)表,作為一個(gè)基礎(chǔ)工作,接下來(lái),我們要利用這個(gè)基礎(chǔ)實(shí)現(xiàn)一個(gè)功能:語(yǔ)義分析。 語(yǔ)義分析 什么是語(yǔ)義分析?形如這樣的代碼: 在詞法和語(yǔ)法層面,它都沒(méi)有...
OK,接下來(lái)我們需要面對(duì)更加嚴(yán)肅的問(wèn)題:如何構(gòu)建一個(gè)真正的解釋器?前幾章的內(nèi)容已經(jīng)足夠的有趣,但是僅僅是添加grammar,然后一步一步實(shí)現(xiàn)Lexer,AST nodes,S...
好吧在上一章中的Pascal語(yǔ)法并不準(zhǔn)確,接下來(lái),我們要修正那些語(yǔ)法錯(cuò)誤,并加入更多的Pascal語(yǔ)言特性,本章我們將更接近真正的Pascal解釋器,完成形如以下代碼的解釋:...
接下來(lái)的內(nèi)容將更加硬核,我們距離創(chuàng)造自己的編程語(yǔ)言更近一步——實(shí)現(xiàn)一個(gè)初步的Pascal解釋器。 Pascal 好吧這是一門古老的語(yǔ)言,在很久很久以前,我還是個(gè)初中生的時(shí)候稍...
這一章,我們要接觸一些稍微硬核點(diǎn)的知識(shí),理解一個(gè)概念——抽象語(yǔ)法樹。 抽象語(yǔ)法樹和語(yǔ)法解析樹 對(duì)于文法: 當(dāng)輸入2*7+3時(shí),可以構(gòu)造成如下語(yǔ)法解析樹: 很容易理解吧,但是這...
本章,我們將繼續(xù)擴(kuò)展我們的解釋器,使其支持乘除運(yùn)算符和運(yùn)算符優(yōu)先級(jí),我們將更加深入編譯原理,加入文法分析( grammar analysis )。 文法與文法分析 等一下,什...
這一章,我們將實(shí)現(xiàn)形如"1+12+123-123"這樣連續(xù)的多位數(shù)加減法實(shí)現(xiàn),為此,我們需要一點(diǎn)點(diǎn)編譯原理。 語(yǔ)法圖與語(yǔ)法分析 對(duì)于上述表達(dá)式,我們可以構(gòu)建一個(gè)簡(jiǎn)單的語(yǔ)法圖 ...
在上一篇中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的加法解釋器,它僅支持一位數(shù)加法,接下來(lái),我們向解釋器添加以下特性: 支持多位整數(shù) 可以跳過(guò)空格 支持減法 處理多位整數(shù) 上一篇中,我們直接使用...
參考:Let’s Build A Simple Interpreter.[https://ruslanspivak.com/lsbasi-part1/]源代碼:github[...
OCP(Open-Closed Principle),通常認(rèn)為是Bertrand Meyer[https://en.wikipedia.org/wiki/Bertrand_M...
引用 計(jì)算機(jī)專業(yè)大一的基礎(chǔ)內(nèi)容之一,值傳遞和引用傳遞: 這里會(huì)輸出兩個(gè)2: 當(dāng)然用指針可以達(dá)到類似的效果,但不完全等價(jià): 用指針太容易出現(xiàn)內(nèi)存問(wèn)題了,引用更加安全,指針可能會(huì)...
最近遇到了一個(gè)問(wèn)題,一個(gè)平時(shí)運(yùn)行沒(méi)有毛病的模塊,被ASAN報(bào)heap use after free,問(wèn)題出在堆內(nèi)存,但是看上去全局變量沒(méi)有哪里會(huì)被釋放,唯一有風(fēng)險(xiǎn)的地方是在棧...
進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)的時(shí)候,我們需要面對(duì)很多問(wèn)題,比如: 什么時(shí)候需要一個(gè)類 一個(gè)類應(yīng)該包含哪些功能,不包含哪些功能 類之間的依賴關(guān)系設(shè)計(jì) 還有很多其它的問(wèn)題,如果不遵照一些...
一個(gè)常見(jiàn)的定義module的方法是寫一個(gè).py文件,除此以外,Python的底層實(shí)現(xiàn)是C/C++,所以你也可以使用C/C++來(lái)寫module,當(dāng)然這是比較高級(jí)的方法了,暫時(shí)不...
類和對(duì)象,作為面向?qū)ο缶幊痰暮诵模谒蠴OP語(yǔ)言里面都是重頭戲,Python也不例外。Python中的類和對(duì)象定義如下: 以class關(guān)鍵字開頭,定義了一個(gè)foo類,并使用...
Python的類內(nèi)成員函數(shù)是method類型,而普通函數(shù)是function類型,精確地來(lái)說(shuō),類成員函數(shù)應(yīng)該被稱為方法。通過(guò)以下代碼,可以看到它們各自的類型: 輸出結(jié)果: 和很...
區(qū)別于C/C++, java等編程語(yǔ)言,python是一門弱類型語(yǔ)言,如果你接觸過(guò)perl或者JS之類的弱類型語(yǔ)言,那么對(duì)這個(gè)特性應(yīng)該不陌生。當(dāng)然即使是動(dòng)態(tài)類型語(yǔ)言,變量也是...
前言:因?yàn)橄訔壨ㄟ^(guò)參數(shù)啟動(dòng)過(guò)于繁瑣,并且對(duì)于需要進(jìn)行分支選擇的情況不好處理,想使用命令行按鍵菜單的形式給用戶做選擇,結(jié)果居然發(fā)現(xiàn)python沒(méi)有提供現(xiàn)成的API,于是研究了一...
前言:Python很方便,平時(shí)工作偶爾用來(lái)做一些小工具,需要參考的時(shí)候百度搜出來(lái)的東西實(shí)在不靠譜,遂決定根據(jù)官網(wǎng)的文檔系統(tǒng)地學(xué)習(xí)一下,順便給中文Python學(xué)習(xí)資料增加一點(diǎn)內(nèi)...