计算机程序的结构
约 751 字大约 3 分钟
2026-01-01
在开始之前,我们先了解一下计算机程序的结构。作为类比,我们先来思考一篇文章的结构。一篇文章可以分为若干个段落,每个段落又可以分为若干个句子,每个句子又可以分为若干个单词。单词是由字母组成的。因此自上而下,一篇文章最终被分解成了一个个字母。那么我们有了全部都字母能不能就写成文章呢?显然是不能的!这其中需要加入一系列的规则。字母经过特定的拼写得到词语,词语、词组需要符合一定的语法才能组成句子。句子经过一定的修辞手法表达作者的意思。最后每一篇文章都是有一定结构的,好的结构能够使读者更加容易的读懂作者想要表述的内容。
与我们的用文字组成的文章类似,计算机程序也可以被分解为从大到小的几个部分。下面一个可供类比的图,这里的定义并不是很严谨。譬如现实中,函数的定义和函数的调用在程序中是不同的。函数的定义中的确可以包含若干个语句。
- 图的左边将程序自上而下分为更加细小的部分,最终它也被分解成了一个字母的集合,即字母表。
- 右边是自下而上如何通过,词法分析、语法分析直到形成一个程序,可以被执行。词法分析和语法分析就是在字母表上定义的规则。
作为一个规模很小的项目,我们尽可能地在有限的篇幅中体会计算机程序方方面面。我们将这个项目分为工程部分和功能部分。
工程部分意味着需要最终可以跑起来。如下图所示,我们会把一系列的代码实现进行模块化,组合起来形成一个最终可以执行的程序。除了代码实现,工程部分还包括了项目的配置文件、依赖管理等。
功能部分我们将用编译原理的方法实现一个简单的计算器。这个项目叫做 Python Easy Calculator(PyEC)。功能需求如下:
- 支持四则运算:加、减、乘、除以及指数
- 支持括号:可以使用括号改变运算优先级
- 支持小数:可以计算包含小数的表达式
- 支持 REPL 模式:可以在命令行中输入表达式,立即得到结果
因为我们舍去了很多复杂功能,比如变量、函数、循环、条件语句等。执行部分也变成了直接求值。
