国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和林格尔县| 崇州市| 手机| 东平县| 博野县| 葫芦岛市| 黑河市| 安溪县| 宁强县| 郎溪县| 商河县| 永仁县| 湘乡市| 邯郸市| 龙泉市| 乾安县| 柏乡县| 运城市| 包头市| 商丘市| 九寨沟县| 阿鲁科尔沁旗| 庄浪县| 甘孜| 宝应县| 萨嘎县| 长沙市| 尼玛县| 射洪县| 江华| 娱乐| 泰顺县| 门头沟区| 新绛县| 绥阳县| 西乌珠穆沁旗| 独山县| 盐边县| 大渡口区| 陆丰市| 阿瓦提县|