BisonC++ インストールメモ

 MacBookMac OS X 10.5 Leopard)へBisonC++をインストールするのに手間取ったので、インストール方法についてまとめてみました。なお、/usr/binにインストールするのが気持ち悪かったので、インストールパスはユーザディレクトリのbin, libにしています。ユーザ名はsumaで、パスは次のようになっています。このメモを参考にユーザディレクトリへインストールする際は、パスを自分の環境にあわせて適宜置き換えてくださいな。/usr/binなどにインストールする場合は、インストール用のコマンドをroot権限で(sudoかsu)で実行してください。

/Users/suma/bin
/Users/suma/lib

BisonC++とは

 BisonC++とは、Frank B. Brokken氏によって開発されたC++構文解析器ジェネレータです。GNU BisonのC++サポート版、という位置づけになると思います。BisonC++本体と、生成されるコードはGPLに従います。GNU Bisonで生成されたコードのライセンスは定義ファイル(.y)に従いますが、BisonC++では強制的にGPLになるので注意が必要ですね。GNU BisonのC++サポートがちょっと切ないこともあるのでBisonC++に移行しましたが、クラスオブジェクトをアクションで間接参照($$, $1,..)できるのでメモリ管理や抽象構文木の作成が楽になるかもしれません。私の気が向いたらBisonC++について詳しく書くかもしれません。

インストール

 さて、本題のBisonC++のインストールですが、次の3つのプログラムが必要です。ちなみに、Ubuntu Linuxではパッケージ管理ツールでBisonC++が用意されてるみたいで、インストールが簡単にできそうです。

  • BisonC++:インストールしたい今回のプログラムです
  • Icmake(Intelligent C-like make):C言語風のメイクツールです。BobcatとBisonC++のコンパイルに使います。
  • Bobcat(Brokken's Own Base Classes And Templates):Brokken氏のC++ライブラリです。BisonC++のコンパイルに必要です。

Icmake(Intelligent C-like make)のインストール

ソースコードを探すとUbuntuのパッケージしか見つからないので、次のURLからicmake_7.11.orig.tar.gzを取ってきて使いました。
http://packages.ubuntu.com/ja/source/hardy/icmake

 アーカイブを展開後、インストールパスの変更をするためにdef/destinationsを編集します。私の環境では次のようになります(自分はマニュアルは不必要なのでMANDIRは変更しなかったんですが)。

#define BINDIR  "/Users/suma/bin"
#define SKELDIR "/Users/suma/share/icmake"
#define MANDIR  "/Users/suma/share/man/man1"
#define LIBDIR  "/Users/suma/lib/icmake"
コンパイル
sh bootstrap.sh

 icm-compのコンパイルで"error: redefinition of parameter 'restrict'"などとエラーが発生。エラー箇所がヘッダファイルになっていましたが、bootstrap.shで実行するgccのオプションに -std=c99 を指定しするとコンパイルできます。Macのヘッダファイルはc99じゃないとコンパイルができないのかしら? しかし別のソースコードコンパイルできてるのが謎であります。どなたか詳しく教えてください。

 インストールパスを/usr/にしてインストールする場合はsudoかsuでインストールします。私の場合はホームディレクトリなので次のコマンドでインストールしました。

インストール
sh install.sh

icmake --v などでちゃんとインストールできているか確認したら、icmakeの準備が完了。

Bobcat 1.17.2

 少し古いバージョンのを使っていますが、最新版でコンパイルできればそれを使えばOKです。なんで自分は古いバージョンを利用したんだっけな。
http://bobcat.sourceforge.net/

./build コマンドにてコンパイルを行います。デフォルトでは一行目が、#!/usr/bin/icmake となっているので、必要があれば変更します。次のコマンドでコンパイルとインストールを行います。インストール先は,INSTALL.im で変更できますが、私の環境ではインストールが失敗したため、手動でインストールしました。

ビルド&ストリップ
./build libraries strip 
インストール
./build install
手動インストール

インストールに失敗&理由の調査が面倒だったので手動コピーでインストールしちゃいました。

オブジェクトファイルのコピー
sudo cp tmp/lib/libbobcat.a /usr/lib
ヘッダファイルのコピー
sudo cp -R tmp/bobcat /usr/include

BisonC++ 2.4.1

http://bisoncpp.sourceforge.net/

 bobcatと同様に./build一行目のicmakeのパスを必要があれば修正します。icmake、bobcatと同様にINSTALL.im でインストールパスを指定します。

コンパイル&ストリップ
./build program strip
インストール
./build install

 コンパイルに失敗してしまったので、ソースコードを修正しました。エラーは、parser/parser.h でFlexLexer::YYText()でのconst呼び出しが失敗していました。応急処置として、parser.hのParser::newYYText()のconstを取り除いてコンパイルを通るようにしました(メンバ関数宣言と定義の両方でconstを削除する)。もっとスマートな解決方法があったかもしれません。

bisonc++ -v で起動を確認できたら完了です。お疲れ様でした。