電卓プログラムを作りながら字句解析、構文解析を学ぼう、というのが今回の趣旨です。
字句解析、構文解析は、すでに英単語帳プログラムの単語の解析や囲碁プログラムの棋譜の解析で実は導入済みなのですが、今回は電卓の式の解析をじっくりやってみたいと思います。たとえば、
12+34*56-78/90
という四則演算の式を字句解析と構文解析で解析し結果を計算したらどうなるでしょうか?
字句解析はまず、式をトークンと呼ばれるかたまりに分割します。分かち書きにすると、
12 + 34 * 56 – 78 / 90
となります。この場合、数字や演算子がトークンです。
構文解析はこれらトークンの関係を解析します。掛け算や割り算の結果が優先されるので、
12 + (34 * 56) – (78 / 90)
のように、かっこの中が先に計算され、その後に、足し算や引き算が計算されます。
プログラミング言語もこのような仕組みで解析され実行されます。
この字句解析、構文解析について分かりやすく書かれた本に『アルゴリズム+データ構造=プログラム』という、Pascal言語を作ったニクラウス ヴィルトの著書があったのですが、絶版になりました。私も昔購入して読んだのですが、どこかに行ってしまいました。この本の新版が以下の『アルゴリズムとデータ構造』です。
多少内容が変わっているみたいですが、私も注文しました。入手次第少し紹介したいと思います。
『アルゴリズム+データ構造=プログラム』にあったのはPascalの構文図で、この連載でも電卓の式の構文図を紹介する予定です。
構文図を文字で書き表したものにBNF(バッカス・ナウア記法)という表記方法があり、これについても紹介したいと思います。
なお、電卓のデザインは私が愛用していたCASIO FX-700Pというプログラミング電卓のテンキーの部分を元にするつもりです。
(つづく)