实现计算器
原因
因为想要练习自己的编程能力, 所以打算写一个计算器出来.
- 具体的需求:
- 实现一个支持四则运算的计算器
- 实现括号, 乘方运算
分析
- 我打算的实现步骤如下:
- 实现词法解析器, 把输入的字符串解析成词语.
- 实现简单的四则运算语法分析与计算
词法解析器
采用状态机来实现
词法:
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天, 看起来过了一个有意义的中秋(好悲哀).
建立时间: 2010/10/26 14:53:00
blog comments powered by Disqus