SableCC のインストール | ||||||||||||||||||||
■SableCCのインストール 2. Java J2SE SDK 1.4.2 のインストール 3. Apache Ant build tool のインストール 2006年11月27日 9:32 更新
|
1. インストールの概要SableCC Java parser generator を稼働させるために、Java J2SE SDK ならびに Ant ビルドツールのセットアップが必要です。 1.1 各ソフトウェア全般に関する情報Java J2SE SDK, Ant, SableCC 全般に関する情報は、以下からどうぞ。
1.2 ライセンス条件Java J2SE SDK, Ant, SableCC のライセンス条件は各々異なります。詳しくは以下からどうぞ。
1.3 プラットフォーム現在のところ、以下の3つのUNIX-OS上で、J2SE + Ant + SableCC のセットアップと動作確認を行っています。 UNIXファイルシステムを有し、csh/tcsh/bashなどのコマンドシェルが利用できる状態で、J2SE SDK が稼働するプラットフォーム上であれば、問題なくこの演習で用いるツール群は動作します。 Windows NT/2000/XP ならびに Cygwin UNIX互換環境下では、Ant build tool がWindowsファイルシステムに非対応のため、この演習ではサポート外とさせて戴きます。もしWindows上での演習を望まれる場合、セットアップならびに動作確認については自己の責任の範囲内で行ってください。 1.4 セットアップの流れJ2SDK + Ant + SableCC の、開発マシンへのセットアップの流れは、概して以下の通り。
2. Java J2SE SDK 1.4.2 のインストール※MacOS X をお使いの場合には、J2SE のセットアップは必要ありません(標準で入っています)。
2.1 J2SE SDK RPM パッケージのダウンロードLinux (IA32) 用 J2SE SDK の RPM パッケージは、以下からダウンロードしてください。
2.2 RPMパッケージの展開RPMパッケージのダウンロードが終了した後、これは自己解凍形式になっているので、一旦.bin を実行して RPM パケージ自身を取り出す必要があります。
2.3 RPMパッケージのインストールroot権限のあるユーザの下、以下のrpm コマンドを実行して、J2SDK を構成するパッケージをインストールします。
J2SDK 1.4.2_09 の場合、install location は、/usr/java/j2sdk1.4.2_09/ となります。 2.4 シンボリックリンク設定この演習では、J2SDK の install location は、/usr/java/j2sdk にあることを前提としています。 また、J2SDK のバージョンアップが行われた後、いちいちシェルのPATH変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。
以下の例は、J2SDK 1.4.2_09 のバージョンの場合です。将来、J2SDKのバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。
2.5 シェルのPATH変数へ J2SE のパスを追加Javaのプログラム開発を行うユーザの、シェルの環境変数について、JAVA_HOME変数 ならびに J2SDK の実行ファイルパス(bin)をPATHに追加します。 ※MacOSXの場合、JAVA_HOME変数をセットすることは、Ant build tool の実行時、MacOSX hack を自動適用するために重要です。 csh/tcsh の場合 (~/.cshrc ~/.tcshrc)
bash の場合 (~/.bashrc)
次回のログオン時から、上記の環境変数が有効になります。
などとして、環境変数を更新してから起動確認を行ってください。 2.6 環境変数セットアップ&起動確認以下のコマンドなどを入力してみて、環境変数のセットアップと、J2SDKに含まれるアプリケーションの起動確認を行ってください。
3. Apache Ant build tool のインストール
3.1 Apache Ant binaryパッケージのダウンロードAntは Java で書かれているので、J2SDK が正しくセットアップされている環境であれば、何処でも実行することができます。 Ant の binary distribution パッケージは、以下からダウンロードしてください。
3.2 binary パッケージの展開binary パッケージのダウンロードが終了した後、これは .tar.gz 形式になっているので、所定の位置で zcat + tar を実行して Antのプロジェクトツリーを展開する必要があります。 root権限のあるユーザの下、以下のコマンドを実行して、Ant のbinaryパッケージを展開します。binaryパッケージは、/tmp/apache-ant-1.6.5-bin.tar.gz にダウンロードされていると仮定しています。
Ant 1.6.5 の場合、上記で展開される場所は、/usr/local/apache-ant-1.6.5/ となります。展開後、所定の場所に Ant のファイル群がセットされていることを確認してください。 3.3 シンボリックリンク設定この演習では、Ant の install location は、/usr/local/ant にあることを前提としています。 また、Ant のバージョンアップが行われた後、いちいちシェルの環境変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。
以下の例は、Ant 1.6.5 のバージョンの場合です。将来、Ant のバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。
3.4 シェルの環境変数 ANT_HOME と パスを追加Antを用いてJavaプログラムのbuildを行うユーザの、シェル環境変数について、ANT_HOME変数 ならびに Ant の実行ファイルパス(bin)をPATHに追加します。 csh/tcsh の場合 (~/.cshrc ~/.tcshrc)
bash の場合 (~/.bashrc)
次回のログオン時から、上記の環境変数が有効になります。
などとして、環境変数を更新してから起動確認を行ってください。 3.5 環境変数セットアップ&起動確認以下のコマンドなどを入力してみて、環境変数のセットアップと、Antの起動確認を行ってください。(bin/ant は、実際は javaによって起動するためのシェルスクリプトです)
4. SableCC のインストール4.1 version3 binaryパッケージのダウンロード
4.1 version3 binaryパッケージのダウンロードSableCC は Java で書かれているので、J2SDK が正しくセットアップされている環境であれば、何処でも実行することができます。プロジェクト全体をbuildする場合には、Antを使用すると大変効率がよくなります。 SableCC の version3 binary パッケージは、以下からダウンロードしてください。
4.2 binary パッケージの展開binary パッケージのダウンロードが終了した後、これは .tar.gz 形式になっているので、所定の位置で zcat + tar を実行して SableCC のプロジェクトツリーを展開する必要があります。 root権限のあるユーザの下、以下のコマンドを実行して、SableCC のbinaryパッケージを展開します。binaryパッケージは、/tmp/sablecc-3.1.tar.gz にダウンロードされていると仮定しています。
SableCC 3.1 の場合、上記で展開される場所は、/usr/local/sablecc-3.1/ となります。展開後、所定の場所に SableCC のファイル群がセットされていることを確認してください。 4.3 シンボリックリンク設定この演習では、SableCC の install location は、/usr/local/sablecc にあることを前提としています。 また、SableCC のバージョンアップが行われた後、いちいちシェルの環境変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。
以下の例は、SableCC 3.1 のバージョンの場合です。将来、SableCC のバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。
4.4 bin/sablecc の調整と実行パーミッション変更現時点の sablecc-3.1.tar.gz を展開後にセットされる、以下のSableCC呼び出し用のシェルスクリプト(bin/sablecc)は、SableCCの本体ライブラリ(sablecc.jar)の位置が絶対パスで指定されていないため、そのままでは正常に動作しません。
また、bin/sablecc に実行パーミッションが付与されていませんので、以下のコマンドを実行して、パーミッションを付与します。
4.5 シェルの環境変数 SABLECC と パスを追加SableCCを用いて開発を行うユーザの、シェル環境変数について、SABLECC変数 ならびに SableCC の実行ファイルパス(bin)をPATHに追加します。更に、SableCCライブラリの位置を、CLASSPATH変数へ追加します。 csh/tcsh の場合 (~/.cshrc ~/.tcshrc)
bash の場合 (~/.bashrc)
次回のログオン時から、上記の環境変数が有効になります。
などとして、環境変数を更新してから起動確認を行ってください。
4.6 環境変数セットアップ&起動確認以下のコマンドなどを入力してみて、環境変数のセットアップと、SableCC の起動確認を行ってください。(bin/sablecc は、実際は javaによって起動するためのシェルスクリプトです)
5. 実行試験J2SDK + Ant + SableCC で構築した環境での実行試験は、以下の手順で行って下さい。 5.1 SableCC用サンプルプロジェクトファイルの取得 5.1 SableCC用サンプルプロジェクトファイルの取得実行試験用に用意してある、サンプルプロジェクトファイル一式は、以下からダウンロードしてください。
5.2 プロジェクトファイルの展開ダウンロードが終了した後、これは .tar.gz 形式になっているので、開発者のワーキングディレクトリの所定の位置で zcat + tar を実行して SableCC用のプロジェクトツリーを展開する必要があります。 以下のコマンドを実行して展開します。なお、パッケージは、/tmp/test0.tar.gz にダウンロードされていると仮定しています。また、展開先のワーキングディレクトリは、ユーザホームディレクトリの下 ~/work/sablecc/examples/ と仮定しています。(ワーキングディレクトリは、適宜作成してください。)
上記で展開される場所は、~/work/sablecc/examples/test0/ となります。展開後、所定の場所に SableCC用 のファイル群がセットされていることを確認してください。 5.3 プロジェクトファイル群の構成展開後、test0.grammar文法ファイル用の、SableCCプロジェクトツリー構成は以下のようになっています。 -------------------------------------------------------------- test0/build.xml Ant ビルド指示ファイル test0/test0.grammer SableCC文法ファイル test0/etc/manifest Jar Manifest指示ファイル test0/src/test0/tool/*.java SableCC PrintTree AST表示ツール -------------------------------------------------------------- build.xmlの内容を確認してください。各ビルド指示子に対する作業内容がXML形式で記述されています。 5.4 プロジェクトファイルのビルド
|
$ ant parsers Buildfile: build.xml prepare: parsers: [exec] SableCC version 3.1 [exec] Copyright (C) 1997-2003 Etienne M. Gagnon |
実行後、以下のparserクラス群が生成されていることを確認してください。
-------------------------------------------------- src/test0/node 構文木のノード記述クラス src/test0/lexer 字句解析器クラス src/test0/parser 構文解析器クラス src/test0/analysis 構文木の探索処理用クラス --------------------------------------------------
次に、src/test0/下に配置されたクラス群全体をコンパイルしてクラスファイルを生成します。
Antのビルド指示子は [compile] です。ant -v compile として -v パラメータを付与して実行すると、コンパイルしている各ソースファイルが表示されます。
※ Ant経由で、[javac src/**/*.java] と同等の処理を実行しています。それに追加して、lexer/lexer.dat parser/parser.dat というlexer/parserが使用するデータファイルを classes ディレクトリへコピーしています。
<実行結果>
$ ant compile Buildfile: build.xml compile: [mkdir] Created dir: /home/foobar/work/sablecc/examples/test0/classes [javac] Compiling 31 source files to /home/foobar/work/sablecc/examples/test0/classes [copy] Copying 2 files to /home/foobar/work/sablecc/examples/test0/classes BUILD SUCCESSFUL Total time: 6 seconds |
実行後、以下のparserクラスファイル群が生成されていることを確認してください。
-------------------------------------------------- classes/test0/node classes/test0/lexer classes/test0/parser classes/test0/analysis classes/test0/tool --------------------------------------------------
更に、classes/test0/下に配置されたクラスファイル群をアーカイブしたjarファイルを生成します。
jarアーカイブに組み入れるManifestは、etc/manifest ファイルの情報を利用します。
manifestファイルの内容は以下のようになっており、jarアーカイブへ、Main-Classの位置を指示してあります。(今回は、構文解析木を表示させる tool.PrintTreeクラスファイル中のmainメソッドとしています)
-------------------------------------------------- etc/manifest Manifest-Version: 1.0 Main-Class: test0.tool.PrintTree --------------------------------------------------
Antのビルド指示子は [jar] です。ant -v jar として -v パラメータを付与して実行すると、アーカイブへ組み入れる各ファイルが表示されます。
※ Ant経由で、[jar classes/**/*.class] と同等の処理を実行しています。それに追加して、lexer/lexer.dat parser/parser.dat というlexer/parserが使用するデータファイルを jarへ組み入れています。
<実行結果>
$ ant jar Buildfile: build.xml compile: jar: [jar] Building jar: /home/foobar/work/sablecc/examples/test0/test0.jar BUILD SUCCESSFUL Total time: 3 seconds |
実行後、test0.jar というファイル名の jarアーカイブが生成されていることを確認してください。
いよいよ、構文解析木を表示させるための実行テストを行ってみます。
実行時には、 J2SE の JVM である javaコマンドを使用します。
実行後、標準入力(stdin)からの入力待ち状態になりますので、整数加算を表す2項演算式を入力し、[Ctrl+D] を入力してください。構文木の探索結果が得られます。
キーボードから直接入力する代わりに、echoコマンドの出力をパイプで繋いで、javaコマンドへ流し込んでも同じ結果が得られます。
「整数同士の加算」以外の入力が与えられた場合、字句解析処理が失敗(Unknown token: b)して、lexerクラスから例外がスローされた後、処理が停止します。
(詳しくは、test0.grammar文法ファイル、ならびに src/test0/node/ディレクトリを参照してください。)
<実行結果>
$ java -jar test0.jar 3 + 4 [Ctrl-D] Start APlusExpr ATermExpr ANumberTerm TNumber: 3 TPlus: + ANumberTerm TNumber: 4 EOF: $ echo "5 + 6 + 7" | java -jar test0.jar Start APlusExpr APlusExpr ATermExpr ANumberTerm TNumber: 5 TPlus: + ANumberTerm TNumber: 6 TPlus: + ANumberTerm TNumber: 7 EOF: $ echo "8 + bar" | java -jar test0.jar test0.lexer.LexerException: [1,5] Unknown token: b at test0.lexer.Lexer.getToken(Unknown Source) at test0.lexer.Lexer.peek(Unknown Source) at test0.parser.Parser.parse(Unknown Source) at test0.tool.TreeBuilder.getNode(Unknown Source) at test0.tool.PrintTree.main(Unknown Source) |
ここまで正常にビルドならびに実行テストが行えたならば、演習に必要な環境は正しくセットアップされています。おめでとうございます!
オプションで、src/test0/下に配置されたクラス群について、javadocをもちいたドキュメント生成が可能です。
Antのビルド指示子は [javadoc] です。
※ Ant経由で、[javadoc src/**/*.java] と同等の処理を実行しています。
<実行結果>
$ ant javadoc Buildfile: build.xml javadoc: [mkdir] Created dir: /home/foobar/work/sablecc/examples/test0/docs [javadoc] Generating Javadoc [javadoc] Javadoc execution [javadoc] ソースファイル /home/foobar/work/sablecc/examples/test0/src/test0/analysis/ Analysis.java を読み込んでいます... [javadoc] ソースファイル /home/foobar/work/sablecc/examples/test0/src/test0/analysis/ AnalysisAdapter.java を読み込んでいます... [javadoc] ソースファイル /home/foobar/work/sablecc/examples/test0/src/test0/analysis/ DepthFirstAdapter.java を読み込んでいます... .....途中省略..... BUILD SUCCESSFUL Total time: 7 seconds |
実行後、docsディレクトリの下に、javadocによるHTML形式ドキュメントセットが生成されていることを確認してください。適当なwebブラウザで、docs/index.html を表示して、内容を確認してみてください。(各クラス間の継承関係がわかると思います)
wasaki@cs.shinshu-u.ac.jp
Copyright(c) 2006 Katsumi Wasaki. All rights reserved.