跳到正文
网络寻租
返回

实现计算器

原因

因为想要练习自己的编程能力, 所以打算写一个计算器出来.

具体的需求:

分析

我打算的实现步骤如下:

词法解析器

采用状态机来实现

词法:

number := [0..9] | number [0..9]
add := +
sub := -
mul := *
div := /
lp  := (
rp  := )
mmu := **

根据词法获得的状态表格:

----------------- -------- --------- ------- -----
statuscondition   [0..9]   [+-/()]   [\*]    [ ]
0.start           1 num    0 fac     2       0
1.numcheck        1 num    0 fac     0       0
2.mulcheck        1 num    0 fac     0 mmu   0
----------------- -------- --------- ------- -----

当跳出number状态时, 记录number. 当跳出mulcheck状态时, 记录mul.

四则运算语法分析和处理

先来一个简单的吧, 只实现四则运算, 2次循环, 一次计算*/, 一次计算+-, 然后打印出结果.

实现完成, 函数是caculate.

然后是能够实现括号, 乘方等复杂操作, 这个需要语法分析, 甚至可能用到AST(抽象语法树)

语法

prime := ( p3 ) | number
p1 := prime ** prime | prime
p2 :=  p2 * p1 | p2 / p1 | p1
p3 := p3 - p2 | p3 + p2 | p2

自己研究了半天, 最后还是看the c programming language里面的解法完成了.

总共花费了1天, 看起来过了一个有意义的中秋(好悲哀).


分享这篇文章:

上一篇
docstring
下一篇
CortexCommand介绍

评论

评论通过 GitHub 账号发布,需要先使用 GitHub 登录。