JavaCC 電卓プログラム
とりあえず、動きを把握するために関数の入出力でメッセージを出してみる。
in CalcUnit()
3 + 5
in AddExpr()
in MuxExpr()
in PrmExpr()
return3 from PrmExpr()
return 3 from MulExpr()
in MuxExpr()
in PrmExpr()
return5 from PrmExpr()
return 5 from MulExpr()
return8 from AddExpr()
result= 8.
in CalcUnit()
図で書くとこんな感じ。って一度Cで同じアルゴリズム書いたことあるな。この本で確認すると、再帰的下向き構文解析(recursive-descent parsing)ですね。
もうちょっと複雑にしてみよう。足し算かけ算混合の、()有り、足し算も3つ並べてみた。
3 * 2 + 2 * (3 - 1) + 2
in AddExpr()
in MuxExpr()
in PrmExpr()
return3 from PrmExpr()
in PrmExpr()
return2 from PrmExpr()
return 6 from MulExpr()
in MuxExpr()
in PrmExpr()
return2 from PrmExpr()
in PrmExpr()
in AddExpr()
in MuxExpr()
in PrmExpr()
return3 from PrmExpr()
return 3 from MulExpr()
in MuxExpr()
in PrmExpr()
return1 from PrmExpr()
return 1 from MulExpr()
return2 from AddExpr()
return2 from PrmExpr()
return 4 from MulExpr()
in MuxExpr()
in PrmExpr()
return2 from PrmExpr()
return 2 from MulExpr()
return12 from AddExpr()
result= 12.
in CalcUnit()
図で書くとこんな感じ。
とりあえず、四則演算はマスター。
上で紹介した、言語による最新アルゴリズム事典は良い本なので、全てのプログラマにお勧め。greedyとかN queen等のアルゴリズムの名前から、実際のアルゴリズムを調べるのには、この本がベスト。
今日のメモ
こういうのって、楽しそう。飲み屋のプログラマー談義みたいだ。
http://pc3.2ch.net/test/read.cgi/prog/1082154544/
The comments to this entry are closed.


Comments