最近在手搓紅黑樹時(shí)遇到一個(gè)問題:類模板的派生類使用智能指針時(shí)的向下轉(zhuǎn)換錯(cuò)誤,總之券敌,經(jīng)過一番研究识藤,智能指針無法實(shí)現(xiàn)類模板指針的向下轉(zhuǎn)換仰担,最終還是用裸指針手動(dòng)管理內(nèi)存更加靈活咱娶。 ...
最近在手搓紅黑樹時(shí)遇到一個(gè)問題:類模板的派生類使用智能指針時(shí)的向下轉(zhuǎn)換錯(cuò)誤,總之券敌,經(jīng)過一番研究识藤,智能指針無法實(shí)現(xiàn)類模板指針的向下轉(zhuǎn)換仰担,最終還是用裸指針手動(dòng)管理內(nèi)存更加靈活咱娶。 ...
在上一章中躯肌,我們完成了一個(gè)符號(hào)表,作為一個(gè)基礎(chǔ)工作炉擅,接下來辉懒,我們要利用這個(gè)基礎(chǔ)實(shí)現(xiàn)一個(gè)功能:語義分析。 語義分析 什么是語義分析坑资?形如這樣的代碼: 在詞法和語法層面耗帕,它都沒有...
OK穆端,接下來我們需要面對(duì)更加嚴(yán)肅的問題:如何構(gòu)建一個(gè)真正的解釋器袱贮?前幾章的內(nèi)容已經(jīng)足夠的有趣,但是僅僅是添加grammar体啰,然后一步一步實(shí)現(xiàn)Lexer攒巍,AST nodes,S...
好吧在上一章中的Pascal語法并不準(zhǔn)確荒勇,接下來柒莉,我們要修正那些語法錯(cuò)誤,并加入更多的Pascal語言特性沽翔,本章我們將更接近真正的Pascal解釋器兢孝,完成形如以下代碼的解釋:...
接下來的內(nèi)容將更加硬核窿凤,我們距離創(chuàng)造自己的編程語言更近一步——實(shí)現(xiàn)一個(gè)初步的Pascal解釋器。 Pascal 好吧這是一門古老的語言跨蟹,在很久很久以前雳殊,我還是個(gè)初中生的時(shí)候稍...
這一章,我們要接觸一些稍微硬核點(diǎn)的知識(shí)窗轩,理解一個(gè)概念——抽象語法樹夯秃。 抽象語法樹和語法解析樹 對(duì)于文法: 當(dāng)輸入2*7+3時(shí),可以構(gòu)造成如下語法解析樹: 很容易理解吧痢艺,但是這...
本章仓洼,我們將繼續(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)編譯原理漂羊。 語法圖與語法分析 對(duì)于上述表達(dá)式,我們可以構(gòu)建一個(gè)簡單的語法圖 ...
在上一篇中卸留,我們實(shí)現(xiàn)了一個(gè)簡單的加法解釋器走越,它僅支持一位數(shù)加法,接下來耻瑟,我們向解釋器添加以下特性: 支持多位整數(shù) 可以跳過空格 支持減法 處理多位整數(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)存問題了,引用更加安全框都,指針可能會(huì)...
最近遇到了一個(gè)問題搬素,一個(gè)平時(shí)運(yùn)行沒有毛病的模塊,被ASAN報(bào)heap use after free魏保,問題出在堆內(nèi)存熬尺,但是看上去全局變量沒有哪里會(huì)被釋放,唯一有風(fēng)險(xiǎn)的地方是在棧...
進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)的時(shí)候谓罗,我們需要面對(duì)很多問題粱哼,比如: 什么時(shí)候需要一個(gè)類 一個(gè)類應(yīng)該包含哪些功能,不包含哪些功能 類之間的依賴關(guān)系設(shè)計(jì) 還有很多其它的問題檩咱,如果不遵照一些...
一個(gè)常見的定義module的方法是寫一個(gè).py文件揭措,除此以外胯舷,Python的底層實(shí)現(xiàn)是C/C++,所以你也可以使用C/C++來寫module绊含,當(dāng)然這是比較高級(jí)的方法了需纳,暫時(shí)不...
類和對(duì)象,作為面向?qū)ο缶幊痰暮诵囊张玻谒蠴OP語言里面都是重頭戲不翩,Python也不例外。Python中的類和對(duì)象定義如下: 以class關(guān)鍵字開頭麻裳,定義了一個(gè)foo類口蝠,并使用...
Python的類內(nèi)成員函數(shù)是method類型,而普通函數(shù)是function類型津坑,精確地來說妙蔗,類成員函數(shù)應(yīng)該被稱為方法。通過以下代碼疆瑰,可以看到它們各自的類型: 輸出結(jié)果: 和很...
區(qū)別于C/C++眉反, java等編程語言,python是一門弱類型語言穆役,如果你接觸過perl或者JS之類的弱類型語言寸五,那么對(duì)這個(gè)特性應(yīng)該不陌生。當(dāng)然即使是動(dòng)態(tài)類型語言耿币,變量也是...
前言:因?yàn)橄訔壨ㄟ^參數(shù)啟動(dòng)過于繁瑣梳杏,并且對(duì)于需要進(jìn)行分支選擇的情況不好處理,想使用命令行按鍵菜單的形式給用戶做選擇淹接,結(jié)果居然發(fā)現(xiàn)python沒有提供現(xiàn)成的API十性,于是研究了一...
前言:Python很方便,平時(shí)工作偶爾用來做一些小工具塑悼,需要參考的時(shí)候百度搜出來的東西實(shí)在不靠譜劲适,遂決定根據(jù)官網(wǎng)的文檔系統(tǒng)地學(xué)習(xí)一下,順便給中文Python學(xué)習(xí)資料增加一點(diǎn)內(nèi)...