数式処理をするプログラムを設計
Transcript of 数式処理をするプログラムを設計
超簡単な数式処理プログラム設計の話
slank(すらんく )
最小構成の数式処理プログラムを設計する
プログラムの仕様•一行入力の式を計算するプログラム•式のエラーチェックはしない•計算過程のアセンブラを生成する•式の計算結果は eaxレジスタに保存する
超簡単でシンプルな数式処理をするだけ!!!!
実行例
一行の式を入力して、その結果を出力するような感じにしたい。(pythonににせました )
今回は計算の仕組みのみの設計で。結果は eaxに格納します。
プログラムの動作手順1. 字句解析 (トークン生成 )
2. 構文解析 (抽象構文木生成 )
3. 実行コード生成
最適化などを行わない簡単なコンパイラの処理を参考にしています。
字句解析入力された一行の式をグループ分けをする。入力を“数値”と“演算子”に分ける。字句の判断は正規表現を用いて実装する。
2*(1+3)+2
<num,2><mult><lparen><num,1><plus><num,3><rparen><plus><num,2>
数式を字句ごとにトークン分けをする
構文解析字句解析で生成されたトークンから構文木を生成する。
字句解析してできたトークン要素を逆ポーランド記法に変換して、構文木を生成。
実行コード生成構文木の内容を上から順にスタックに pushして、上から順に読んでアセンブラを生成する。演算子を見つけながらアセンブラを生成。
1
2
*
4
+
3
+
この作業のアセンブラを生成
実行コード生成スタック上を演算子を見つけながらアセンブラを生成。*はmult,+は add, –は sub, /は divを使ったアセンブラで表現
mov 4, eaxadd 3, eaxmult 2, eaxadd 1, eax
あとは、 eaxの内容を出力できれば完了
今後の課題•まず実装する。。•変数を使えるようにする• if文、 for文 ,while文
今度実装してみます