网络寻租

Programmer, Gamer, Hacker

实现计算器

| Comments

原因

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

具体的需求: – 实现一个支持四则运算的计算器 – 实现括号, 乘方运算

分析

我打算的实现步骤如下: – 实现词法解析器, 把输入的字符串解析成词语. – 实现简单的四则运算语法分析与计算

词法解析器

采用状态机来实现

词法:

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天, 看起来过了一个有意义的中秋(好悲哀).

Comments