实现计算器

原因

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

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

分析

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

词法解析器

采用状态机来实现

词法:

          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
===>