50行代碼能做什么?教你用50行python代碼制作一個計算器
前言
在本篇文章中,將向大家演示咋樣像一個通用計算器一樣解析并計算一個四則運算表達(dá)式。我們結(jié)束的時候,我們將得到一個可以處理諸如 1+2*-(-3+2)/5.6+3樣式的表達(dá)式的計算器了。當(dāng)然,你也可以將它拓展的更為強(qiáng)大。
語法
對于那些不懂的如何解析和正式語法工作的人而言,這里有一個快速的概覽:正式語法是用來解析文本的一些不同層面的規(guī)則。每一個規(guī)則都描述了相對應(yīng)的那部分輸入的文本是如何組成的。
這里是一個用來展示如何解析1+2+3+4的例子:
或者用 EBNF:
解析器每次都會尋找add+number或者number+number,找到一個之后就會將其轉(zhuǎn)換成add;旧隙裕恳粋解析器的目標(biāo)都在于盡可能的找到最高層次的表達(dá)式抽象。
以下是解析器的每個步驟:
number + number + number + number
第一次轉(zhuǎn)換將所有的Number變成“number”規(guī)則
[number + number] + number + number
解析器找到了它的第一個匹配模式!
[add + number] + number
在轉(zhuǎn)換成一個模式之后,它開始尋找下一個
[add + number]
add
這些有次序的符號變成了一個層次上的兩個簡單規(guī)則: number+number和add+number。這樣,只需要告訴計算機(jī)如果解決這兩個問題,它就能解析整個表達(dá)式。事實上,無論多長的加法序列,它都能解決! 這就是形式文法的力量。
運算符優(yōu)先級
算數(shù)表達(dá)式并不僅僅是符號的線性增長,運算符創(chuàng)造了一個隱式的層次結(jié)構(gòu),這非常適合用形式文法來表示:
這相當(dāng)于:
我們可以通過嵌套規(guī)則表示此語法中的結(jié)構(gòu):
讓我們在腦海中模擬一下使用這個神奇的解析器來分析1+2*3*4的過程:
number + number * number * number
number + [number * number] * number
解析器不知道number+number的結(jié)果,所以這是它(解析器)的另一個選擇
number + [mul * number]
number + mul
現(xiàn)在我們遇到了一點困難! 解析器不知道如何處理number+mul。我們可以區(qū)分這種情況,但是如果我們繼續(xù)探索下去,就會發(fā)現(xiàn)有很多不同的沒有考慮到得可能,比如mul+number, add+number, add+add, 等等。
那么我們應(yīng)該怎么做呢?
幸運的是,我們可以做一點小“把戲”:我們可以認(rèn)為一個number本身是一個乘積,并且一個乘積本身是一個和!
這種思路一開始看起來有點古怪,不過它的確是有意義的:
但是如果 mul能夠變成 add, 且 number能夠變成 mul , 有些行的內(nèi)容就變得多余了。丟棄它們,我們就得到了:
讓我們來使用這種新的語法來模擬運行一下1+2*3*4:
number + number * number * number
現(xiàn)在沒有一個規(guī)則是對應(yīng)number*number的了,但是解析器可以“變得有創(chuàng)造性”
number + [number] * number * number
number + [mul * number] * number
number + [mul * number]
[number] + mul
[mul] + mul
[add + mul]
add
成功了。!
如果你覺得這個很奇妙,那么嘗試著去用另一種算數(shù)表達(dá)式來模擬運行一下,然后看看表達(dá)式是如何用正確的方式來一步步解決問題的;蛘叩戎喿x下一節(jié)中的內(nèi)容,看看計算機(jī)是如何一步步運行出來的!

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-6.16立即報名>> 【在線會議】Solution Talks |Computex 2025關(guān)鍵趨勢深讀
-
6月20日立即下載>> 【白皮書】精準(zhǔn)測量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報名>> 【在線會議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會
-
7.30-8.1火熱報名中>> 全數(shù)會2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費預(yù)約>> OFweek 2025具身機(jī)器人動力電池技術(shù)應(yīng)用大會
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級獨角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過于簡單
- 10 為何全球AI巨頭都在搶?MCP協(xié)議背后的暴富玄機(jī)大公開!