最終演習の課題として、
第19章 電卓の作成 を変更して
「通常の式を計算する電卓にしたい」
という希望がありました。
通常の電卓は、演算子(演算ボタン)に優先順位はなく、
押された順に(1つ前に押された)演算を実行します。
演算結果は1つ保持しておけば十分です。
演算子の優先順位やカッコを考慮すると、そうはいきません。
右側に優先順位の高い演算子が現れた場合は、左側の演算せずに先にすすまなければなりません。
一般的には、
構文解析という処理をして、式を木構造で表現したり、
前置記法 や
後置記法に変換をします。
簡単な構文解析として「演算子順位解析」や「再帰下降解析 recursive decent parse」があります。
ここでは、演算子順位解析を概説しますが、
入力された式を木表現に変換するのではなく、「計算できる部分から順に計算をすすめる」
という例を紹介します。
演算子順位表は、となりあった(といっても通常は間に数値がある)演算子について
どちらを先に計算するかを示した表です。下表において、
- > ・・・ 左側を先に計算する
- < ・・・ 右側を先に計算する
- = ・・・ 間にある計算結果を取りだす
- x ・・・ 許されない組み合わせ
という意味になります。
+ は + か − 、 * は × か ÷ のいずれかという意味です。
また、式の始点(左端)を ^ 、終点(右端)を $ で表現します。
2項演算子のみを扱うことにします。
下表の縦にならんだ演算子は解析中の左側の演算子、横にならべた演算子は右側に現れた演算子です。