Golangの練習で簡単な構文解析型のCUI電卓作ってみた

1ヵ月前くらいからGolangを書き始めています。さきほど練習で書いたプログラムを技術向上のためにもここにメモ。

仕様

  • 利用できる変数はa〜zの26個
  • a=10+20 の形で演算と代入処理可能
  • ( ) + - * /演算子を利用
  • ? で結果出力する
  • 練習なので基本パッケージのみを利用

使い方

上の仕様の通り実際に使ってみると以下のような感じです。対話型です。

$ go run calculator.go
input>a = 10
input>? a
Answer: 10
input>b = 20
input>c = (a+b)*5 - (30-20)/5
input>?c
Answer: 148
input>? 1+ 2+a +b
Answer: 33
input>^D
byebye!

Web上で試すには

https://play.golang.org/p/Kljuy4H21O

最後にあるmain関数のの部分いじれば計算式変えて試せます。

func main() {
    calc := newCalc()
    calc.setNewLine("a=10")
    calc.statement()
    calc.setNewLine("b=20")
    calc.statement()
    calc.setNewLine("c = (a+b)*5 - (30-20)/5")
    calc.statement()
    calc.setNewLine("?c")
    calc.statement()
    calc.setNewLine("?1+2+a+b")
    calc.statement()
}

コード

gist.github.com

参考書籍

こちらの4.3章にあるCプログラムの内容を参考にしています。