国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

僅用50行代碼實現一個Python編寫的計算器的教程

2020-02-23 00:46:48
字體:
來源:轉載
供稿:網友

 簡介

在這篇文章中,我將向大家演示怎樣向一個通用計算器一樣解析并計算一個四則運算表達式。當我們結束的時候,我們將得到一個可以處理諸如 1+2*-(-3+2)/5.6+3樣式的表達式的計算器了。當然,你也可以將它拓展的更為強大。

我本意是想提供一個簡單有趣的課程來講解 語法分析 和 正規語法(編譯原理內容)。同時,介紹一下PlyPlus,這是一個我斷斷續續改進了好幾年的語法解析 接口。作為這個課程的附加產物,我們最后會得到完全可替代eval()的一個安全的四則運算器。

如果你想在自家的電腦上試試本文中給的例子的話,你應該先安裝 PlyPlus ,使用命令pip install plyplus  。(譯者注:pip是一個包管理系統,用來安裝用python寫的軟件包,具體使用方法大家可以百度之或是google之,就不贅述了。)

本篇文章需要對python的繼承使用有所了解。

語法

對于那些不懂的如何解析和正式語法工作的人而言,這里有一個快速的概覽:正式語法是用來解析文本的一些不同層面的規則。每一個規則都描述了相對應的那部分輸入的文本是如何組成的。

這里是一個用來展示如何解析1+2+3+4的例子:
 

Rule #1 - add IS MADE OF add + number            OR number + number

或者用 EBNF:
 

add: add'+'number  | number'+'number  ;

解析器每次都會尋找add+number或者number+number,找到一個之后就會將其轉換成add。基本上而言,每一個解析器的目標都在于盡可能的找到最高層次的表達式抽象。

以下是解析器的每個步驟:

  number + number + number + number

    第一次轉換將所有的Number變成“number”規則

  [number + number] + number + number

    解析器找到了它的第一個匹配模式!

  [add + number] + number

    在轉換成一個模式之后,它開始尋找下一個

  [add + number]  add


這些有次序的符號變成了一個層次上的兩個簡單規則: number+number和add+number。這樣,只需要告訴計算機如果解決這兩個問題,它就能解析整個表達式。事實上,無論多長的加法序列,它都能解決! 這就是形式文法的力量。
運算符優先級

算數表達式并不僅僅是符號的線性增長,運算符創造了一個隱式的層次結構,這非常適合用形式文法來表示:

1 + 2 * 3 / 4 - 5 + 6

這相當于:

1 + (2 * 3 / 4) - 5 + 6

我們可以通過嵌套規則表示此語法中的結構:
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三台县| 仙居县| 巫溪县| 穆棱市| 息烽县| 镇平县| 白朗县| 襄樊市| 常州市| 长葛市| 陇南市| 延吉市| 蓬溪县| 汝南县| 固阳县| 吴川市| 尼玛县| 甘泉县| 黄龙县| 龙井市| 瑞丽市| 邹平县| 庄河市| 吉木萨尔县| 平武县| 莫力| 年辖:市辖区| 哈密市| 南岸区| 京山县| 商丘市| 桦南县| 芮城县| 阿图什市| 横峰县| 无极县| 辽中县| 滨州市| 延川县| 垦利县| 金溪县|