いや~。今日は楽しかった。まだまだ、 spirit の実装については…さっぱり分からないものの(ソース見てもよく分からん)、ちょっとずつ使えるようにはなってきました。何度も言ってるかもしんないけど、 spirit てのは C++ のテンプレートで実装されたお手軽パーサーです。 BNF っぽく文法を書いて、セマンティックアクション(文法解析時の処理)を割り当てるって感じです。
とりあえず、電卓っぽいのもを試してるとこ。数式から AST を生成して、計算~。 AST のノードとして boost::variant を使ったらとっても~いい感じになりました。基本的にノード値としては、そのノードの種類によってまちまちになるので、 C 的には union なんかを使いたくなるのだろうけど、ここは C++ っぽく variant を使ってみました。 variant ってのは、色んな型の値を入れられる boost の型です。
これも、形になったらアップしますね。ちょっとしたアプリを作ろうと思ってるので。
あと、ふと思ったのが、コンパイルに時間かかるな。やっぱ boost::spirit とか boost::variant とか使うとテンプレートのおかげでコンパイラが酷使されるようです。
- 2006/11/11(土) 00:25:52|
- ソフトウェア開発
-
| トラックバック:0
-
| コメント:0