さて、今回で電卓作成に関しては完結します。
独自プログラミング言語作成っていうよりは、bison(yacc)とflex(lex)の使い方に終始してしまっているわけですが、基本を押さえないと訳分からんことになるので。。
ってことで、今回は電卓作成完結編です。
※基本的にはおすすめ本で紹介している書籍を参考にさせて頂いています。
■前回の記事はこちら
僕のプロフィールはこちら
今回使用するソースコード
■Git Hub
URL:「https://github.com/izumin0401/Zero/tree/master/tmp/calculator」
上記にすべて格納しています。
前提
どちらもGit Hub上にソースコードがあるのでご心配なく。
電卓を実行する準備
ってことで、まずは電卓を動かす準備をします。
bisonを実行
まずはbisonを実行します。
1 |
bison --yacc -dv calculator.y |
「–yacc」オプションを付与することでyacc互換で実行されます。
「-dv」オプションに関しては以下を参照してください。
URL:「http://guppy.eng.kagawa-u.ac.jp/~kagawa/2007/ProgLang/bison-1.2.8/bison-ja_12.html」
これにより、「y.yab.h」「y.tab.c」「y.output」の3ファイルが出力されます。
※ファイルが「y.output」しか出力されない場合は、おそらくエラーが出ています。
bisonのバージョンを「2.1」にして再度やってみてください。
また、「y.output」ファイルはコンフリクトやワーニングが発生した場合に出力されるファイルですが、今回はワーニングしか出なかったので先に進みます。
flexを実行
次にflexを実行します。
なんかイメージ的にはこっちの方が先な気がするんですけどね~。
1 |
flex calculator.l |
これにより、「lex.yy.c」というファイルが出力されます。
ファイル構成
現段階で↑のようになります。
なっていない場合は、bison、もしくはflexが正しく動作していない可能性があります。
gccを実行
gccを実行します。
1 |
gcc -o calculator y.tab.c lex.yy.c |
これにより、「calculator.exe」というファイルが出力されます。
このファイルが電卓本体ということになります。
道のりが長いんじゃああああ。
電卓を実行、の前にファイル構成はこんな感じ
各種ファイルの構成はこんな感じになります。
下記サイトから画像を頂きました。
URL:「http://kmaebashi.com/programmer/devlang/yacclex.html」
※「mycalc」が今回は「calculator」となっているので注意してください。
電卓を実行してみる
先ほど出力されたexeファイルを実行してみます。
どうだ!!
上記のように正しく計算されていることが分かります。
※出力内容がdouble型なのは、lex&yaccファイルでdoubleの定義をしたからですね。
コマンド打つの面倒よね?
コマンド打つの、面倒よね?
ってことで、先ほどのGit Hubにバッチファイル「make.bat」とシェルファイル「make.sh」があります。
今回の成果物
今回コマンドによって出力されたファイル群は以下に格納してあります。
URL:「https://github.com/izumin0401/Zero/tmp/calculator/output」
おすすめ本
これおすすめやで。
まとめ
これでとりあえず電卓はできました。
ってことで、基礎中の基礎はおわり。
今後も少し話を脱線しながら本格的に言語作成に入ります。