boost::spiritをはじめてみる
処理系作成をなんとか進めたいのですが、まずは環境作り。
bison(構文解析)+flex(字句解析)でCベースでやろうとしてたんですが、
面倒臭くなってやっぱりC++にしようかと思いました。
で、Cだととりあえず簡単に動くものをビルドできたんですが、
C++だとどうもうまくいかない。
flexのファイル(.l)にC++コードを書いてちゃんと生成できるし、
bisonのファイル(.y)にC++コードを書いても生成できるようなのですが、
それらをリンクしてビルドするとエラーが出てしまいます。
それでけっこう時間費しちゃったのですが、
いろいろWebとか見てるうちにboost::spiritが使えることを知りました。
BoostはC++の有名な拡張テンプレートライブラリなのですが、とても強力です。
中身がどうなってんだかちょっとやそっとじゃ想像付かないような、
使い方で凄いことができちゃいます(なんのことやら…
ライブラリというよりは言語仕様を拡張している感じですね。
テンプレートと演算子のオーバーロードでそれを実現しているわけです。
だからboostを使えるようになるには、
普通のライブラリを使えるようになるエネルギーではなくて
新しい言語を使えるようになる程のエネルギーが必要になるのかもしれません。
まぁライブラリなんで必要なものだけ使えればそれでいいんですけどね。
で、boost::spiritとは何なのか。
これはbison+flexの代わりになるものです。
外部プログラムではなく、ライブラリで構文解析+字句解析を自動化しようという試みです。
そもそも私はflexやbisonの作りやプログラミングスタイルには
かなり不満があったのでこれらがC++プログラムの中で閉じて実現できることは
正に望んでいたソリューションであったわけです。
あ、もう15分過ぎました。
というわけでboost::spiritを学びながらちびちび進みます。
新しいことをやるのは楽しい!
ちなみにかなり前に買ったけどほとんど読んでいない
Boost C++ Libraryを参考書として利用しています。

まぁ分かってるとは思うが、書いちゃった以上は、続き(boost::spiritについて)を
書かなきゃね。ヨロ
プログラミング言語学習のプロジェクトも見てるんで、
そっちの更新も同時に期待していますw
まぁ書くつもりはありますが、
あんまり期待したいしない方が良いと思います。
書いても人様のお役に立てるようなものは出そうもないですから。
…て最初から期待なんかしてないよね。