SableCC のインストール

■SableCCのインストール

1. インストールの概要

2. Java J2SE SDK 1.4.2 のインストール

3. Apache Ant build tool のインストール

4. SableCC のインストール

5. 実行試験


■CAI演習課題0


■参考資料・リンク集

■質問・相談用掲示板

←目次へ戻る

2006年11月27日 9:32 更新

 

1. インストールの概要

SableCC Java parser generator を稼働させるために、Java J2SE SDK ならびに Ant ビルドツールのセットアップが必要です。

1.1 各ソフトウェア全般に関する情報
1.2 ライセンス条件
1.3 プラットフォーム
1.4 セットアップの流れ


1.1 各ソフトウェア全般に関する情報

Java J2SE SDK, Ant, SableCC 全般に関する情報は、以下からどうぞ。

Java 2 Platform, Standard Edition (J2SE)
http://java.sun.com/j2se/

Apache Ant : Java-based build tool
http://ant.apache.org/

SableCC : Java parser generator
http://sablecc.org/


1.2 ライセンス条件

Java J2SE SDK, Ant, SableCC のライセンス条件は各々異なります。詳しくは以下からどうぞ。

Sun Microsystems, Inc. Binary Code License Agreement for the
JAVA(TM) 2 SOFTWARE DEVELOPMENT KIT (J2SDK), STANDARD EDITION, VERSION 1.4.2_X
http://java.sun.com/j2se/1.4.2/j2sdk-1_4_2_09-license.txt

The Apache Software License Version 2.0
applies to all releases of Ant starting with ant 1.6.1
http://ant.apache.org/license.html

GNU Lesser General Public License
applies at all releases of SableCC
http://www.gnu.org/copyleft/lesser.html


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 の、開発マシンへのセットアップの流れは、概して以下の通り。
以下、Linuxマシン(Turbolinux 10 Desktop)へのセットアップすることを前提にして説明を行っていきます。

[Step 1] UNIXマシンの準備(あるいはインストール)
     ↓
[Step 2] Java J2SE SDK のインストール&設定(※MacOS Xの場合は不要)
     ↓
[Step 3] Ant build tool のインストール&設定
     ↓
[Step 4] SableCC のインストール&設定
     ↓
[Step 5] サンプルファイルを用いたparser生成の確認

 

2. Java J2SE SDK 1.4.2 のインストール

※MacOS X をお使いの場合には、J2SE のセットアップは必要ありません(標準で入っています)。

Sun提供のインストールガイドは以下から参照してください。
http://java.sun.com/j2se/1.4.2/ja/install.html
http://java.sun.com/j2se/1.4.2/ja/install-linux.html#install-rpm


2.1 J2SE SDK RPM パッケージのダウンロード
2.2 RPMパッケージの展開
2.3 RPMパッケージのインストール
2.4 シンボリックリンク設定
2.5 シェルのPATH変数へ J2SE のパスを追加
2.6 環境変数セットアップ&起動確認


2.1 J2SE SDK RPM パッケージのダウンロード

Linux (IA32) 用 J2SE SDK の RPM パッケージは、以下からダウンロードしてください。
ダウンロード前に、使用条件許諾について accept しておく必要があります。

ダウンロード Java 2 SDK, Standard Edition, v 1.4.2_09 (J2SE)
→ J2SE Software Development Kit (SDK) [J2SE SDK のダウンロード] を選択
http://java.sun.com/j2se/1.4.2/ja/download.html


2.2 RPMパッケージの展開

RPMパッケージのダウンロードが終了した後、これは自己解凍形式になっているので、一旦.bin を実行して RPM パケージ自身を取り出す必要があります。

<参考URLからの抜粋>
http://java.sun.com/j2se/1.4.2/ja/install-linux.html#install-rpm

ダウンロードファイルがあるディレクトリに移動し、次のコマンドを実行して実行権を設定します。次に、バイナリを実行して RPM ファイルを抽出します。

$ chmod a+x j2sdk-1_4_2_<version>-linux-i586-rpm.bin

$ ./j2sdk-1_4_2_<version>-linux-i586-rpm.bin

PATH 環境変数に "." を指定しなかった場合は、最初の "./" が必須となるので、注意してください。

バイナリライセンス契約が表示されます。インストールを続行するには、このライセンスに同意する必要があります。ライセンスに同意すると、現在のディレクトリ内に j2sdk-1_4_2_<version>-linux-i586.rpm ファイルが作成されます。

 


2.3 RPMパッケージのインストール

root権限のあるユーザの下、以下のrpm コマンドを実行して、J2SDK を構成するパッケージをインストールします。

$ su
# rpm -iv j2sdk-1_4_2_<version>-linux-i586.rpm

J2SDK 1.4.2_09 の場合、install location は、/usr/java/j2sdk1.4.2_09/ となります。
rpmコマンド実行後、所定の場所に J2SDK のファイル群がセットされていることを確認してください。


2.4 シンボリックリンク設定

この演習では、J2SDK の install location は、/usr/java/j2sdk にあることを前提としています。

また、J2SDK のバージョンアップが行われた後、いちいちシェルのPATH変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。

/usr/java/j2sdk1.4.2_09/ --> /usr/java/j2sdk/

以下の例は、J2SDK 1.4.2_09 のバージョンの場合です。将来、J2SDKのバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。

# cd /usr/java
# ln -s j2sdk1.4.2_09 j2sdk

 


2.5 シェルのPATH変数へ J2SE のパスを追加

Javaのプログラム開発を行うユーザの、シェルの環境変数について、JAVA_HOME変数 ならびに J2SDK の実行ファイルパス(bin)をPATHに追加します。

※MacOSXの場合、JAVA_HOME変数をセットすることは、Ant build tool の実行時、MacOSX hack を自動適用するために重要です。

csh/tcsh の場合 (~/.cshrc ~/.tcshrc)

setenv JAVA_HOME /usr/java/j2sdk
set path=( $path $JAVA_HOME/bin )

bash の場合 (~/.bashrc)

export JAVA_HOME=/usr/java/j2sdk
export PATH=${PATH}:${JAVA_HOME}/bin

次回のログオン時から、上記の環境変数が有効になります。
ログオンし直さない場合は、

$ source ~/.bashrc

などとして、環境変数を更新してから起動確認を行ってください。


2.6 環境変数セットアップ&起動確認

以下のコマンドなどを入力してみて、環境変数のセットアップと、J2SDKに含まれるアプリケーションの起動確認を行ってください。

$ set
$ which java


$ javac -help
$ java -version
$ jar
$ javadoc

 

3. Apache Ant build tool のインストール

Apache Ant提供のインストールガイドは以下から参照してください。
http://ant.apache.org/manual/index.html
http://ant.apache.org/manual/installlist.html

3.1 Apache Ant binaryパッケージのダウンロード
3.2 binary パッケージの展開
3.3 シンボリックリンク設定
3.4 シェルの環境変数 ANT_HOME と パスを追加
3.5 環境変数セットアップ&起動確認

 


3.1 Apache Ant binaryパッケージのダウンロード

Antは Java で書かれているので、J2SDK が正しくセットアップされている環境であれば、何処でも実行することができます。 

Ant の binary distribution パッケージは、以下からダウンロードしてください。

ダウンロード Apache Ant 1.6.5 is the best available version
→  Current Release of Ant セクションから [apache-ant-1.6.5-bin.tar.gz] を選択
http://ant.apache.org/bindownload.cgi


3.2 binary パッケージの展開

binary パッケージのダウンロードが終了した後、これは .tar.gz 形式になっているので、所定の位置で zcat + tar を実行して Antのプロジェクトツリーを展開する必要があります。

root権限のあるユーザの下、以下のコマンドを実行して、Ant のbinaryパッケージを展開します。binaryパッケージは、/tmp/apache-ant-1.6.5-bin.tar.gz にダウンロードされていると仮定しています。

$ su
# cd /usr/local
# zcat /tmp/apache-ant-1.6.5-bin.tar.gz | tar xpf -

Ant 1.6.5 の場合、上記で展開される場所は、/usr/local/apache-ant-1.6.5/ となります。展開後、所定の場所に Ant のファイル群がセットされていることを確認してください。


3.3 シンボリックリンク設定

この演習では、Ant の install location は、/usr/local/ant にあることを前提としています。

また、Ant のバージョンアップが行われた後、いちいちシェルの環境変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。

/usr/local/apache-ant-1.6.5/ --> /usr/local/ant/

以下の例は、Ant 1.6.5 のバージョンの場合です。将来、Ant のバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。

# cd /usr/local
# ln -s apache-ant-1.6.5 ant

 


3.4 シェルの環境変数 ANT_HOME と パスを追加

Antを用いてJavaプログラムのbuildを行うユーザの、シェル環境変数について、ANT_HOME変数 ならびに Ant の実行ファイルパス(bin)をPATHに追加します。

csh/tcsh の場合 (~/.cshrc ~/.tcshrc)

setenv ANT_HOME /usr/local/ant
set path=( $path $ANT_HOME/bin )

bash の場合 (~/.bashrc)

export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin

次回のログオン時から、上記の環境変数が有効になります。
ログオンし直さない場合は、

$ source ~/.bashrc

などとして、環境変数を更新してから起動確認を行ってください。


3.5 環境変数セットアップ&起動確認

以下のコマンドなどを入力してみて、環境変数のセットアップと、Antの起動確認を行ってください。(bin/ant は、実際は javaによって起動するためのシェルスクリプトです)

$ set
$ which ant
$ ant -help

 

4. SableCC のインストール

4.1 version3 binaryパッケージのダウンロード
4.2 binary パッケージの展開
4.3 シンボリックリンク設定
4.4 bin/sablecc の調整と実行パーミッション変更
4.5 シェルの環境変数 SABLECC と パスを追加
4.6 環境変数セットアップ&起動確認

 


4.1 version3 binaryパッケージのダウンロード

SableCC は Java で書かれているので、J2SDK が正しくセットアップされている環境であれば、何処でも実行することができます。プロジェクト全体をbuildする場合には、Antを使用すると大変効率がよくなります。

SableCC の version3 binary パッケージは、以下からダウンロードしてください。
(注記:以下、version3.1 用のインストール手順に修正 [2005/10/03])

SourceForge.net : Project: SableCC
http://sourceforge.net/projects/sablecc/

→ [ Latest File Releases ] → [SableCC 3.1 Download] を選択


4.2 binary パッケージの展開

binary パッケージのダウンロードが終了した後、これは .tar.gz 形式になっているので、所定の位置で zcat + tar を実行して SableCC のプロジェクトツリーを展開する必要があります。

root権限のあるユーザの下、以下のコマンドを実行して、SableCC のbinaryパッケージを展開します。binaryパッケージは、/tmp/sablecc-3.1.tar.gz にダウンロードされていると仮定しています。

$ su
# cd /usr/local
# zcat /tmp/sablecc-3.1.tar.gz | tar xpf -

SableCC 3.1 の場合、上記で展開される場所は、/usr/local/sablecc-3.1/ となります。展開後、所定の場所に SableCC のファイル群がセットされていることを確認してください。


4.3 シンボリックリンク設定

この演習では、SableCC の install location は、/usr/local/sablecc にあることを前提としています。

また、SableCC のバージョンアップが行われた後、いちいちシェルの環境変数を調整するのは煩雑なので、以下のようなシンボリックリンクを作成しておきます。

/usr/local/sablecc-3.1/ --> /usr/local/sablecc/

以下の例は、SableCC 3.1 のバージョンの場合です。将来、SableCC のバージョンアップを行った後は、シンボリックリンクを張り直すだけでOKです。

# cd /usr/local
# ln -s sablecc-3.1 sablecc

 


4.4 bin/sablecc の調整と実行パーミッション変更

現時点の sablecc-3.1.tar.gz を展開後にセットされる、以下のSableCC呼び出し用のシェルスクリプト(bin/sablecc)は、SableCCの本体ライブラリ(sablecc.jar)の位置が絶対パスで指定されていないため、そのままでは正常に動作しません。


/usr/local/sablecc/bin/sablecc :: 11行目を以下のように修正(赤字の部分

(修正前)java -jar lib/sablecc.jar $*

(修正後)java -jar /usr/local/sablecc/lib/sablecc.jar $*

 

また、bin/sablecc に実行パーミッションが付与されていませんので、以下のコマンドを実行して、パーミッションを付与します。

# cd /usr/local/sablecc/bin
# chmod a+x sablecc

 


4.5 シェルの環境変数 SABLECC と パスを追加

SableCCを用いて開発を行うユーザの、シェル環境変数について、SABLECC変数 ならびに SableCC の実行ファイルパス(bin)をPATHに追加します。更に、SableCCライブラリの位置を、CLASSPATH変数へ追加します。

csh/tcsh の場合 (~/.cshrc ~/.tcshrc)

setenv SABLECC /usr/local/sablecc
set path=( $path $SABLECC/bin )
setenv CLASSPATH .:$SABLECC/lib

bash の場合 (~/.bashrc)

export SABLECC=/usr/local/sablecc
export PATH=${PATH}:${SABLECC}/bin
export CLASSPATH=.:${SABLECC}/lib

次回のログオン時から、上記の環境変数が有効になります。
ログオンし直さない場合は、

$ source ~/.bashrc

などとして、環境変数を更新してから起動確認を行ってください。



4.6 環境変数セットアップ&起動確認

以下のコマンドなどを入力してみて、環境変数のセットアップと、SableCC の起動確認を行ってください。(bin/sablecc は、実際は javaによって起動するためのシェルスクリプトです)

$ set
$ which sablecc
$ sablecc

 

5. 実行試験

J2SDK + Ant + SableCC で構築した環境での実行試験は、以下の手順で行って下さい。

5.1 SableCC用サンプルプロジェクトファイルの取得
5.2 プロジェクトファイルの展開
5.3 プロジェクトファイル群の構成
5.4 プロジェクトファイルのビルド
5.5 実行テスト
5.6 javadocドキュメントセットの生成(オプション)


5.1 SableCC用サンプルプロジェクトファイルの取得

実行試験用に用意してある、サンプルプロジェクトファイル一式は、以下からダウンロードしてください。

test0.grammar試験用プロジェクトファイル
examples/test0-src.tar.gz


5.2 プロジェクトファイルの展開

ダウンロードが終了した後、これは .tar.gz 形式になっているので、開発者のワーキングディレクトリの所定の位置で zcat + tar を実行して SableCC用のプロジェクトツリーを展開する必要があります。

以下のコマンドを実行して展開します。なお、パッケージは、/tmp/test0.tar.gz にダウンロードされていると仮定しています。また、展開先のワーキングディレクトリは、ユーザホームディレクトリの下 ~/work/sablecc/examples/ と仮定しています。(ワーキングディレクトリは、適宜作成してください。)

$ cd ~/work/sablecc/examples
$ zcat /tmp/test0.tar.gz | tar xpf -
$ cd test0

上記で展開される場所は、~/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 プロジェクトファイルのビルド


5.4.1 SableCC parserクラス群の生成

まず最初に、test0.grammer文法ファイルに基づいて、src/test0/の下にparserクラス群を SableCC を用いて生成します。

Antのビルド指示子は [parsers] です。
※ Ant経由で、[sablecc -d src test0.grammer] を実行しています。

<実行結果>

$ ant parsers

Buildfile: build.xml

prepare:

parsers:

     [exec] SableCC version 3.1
     [exec] Copyright (C) 1997-2003 Etienne M. Gagnon  and
     [exec] others.  All rights reserved.

     [exec] This software comes with ABSOLUTELY NO WARRANTY.  This is free software,
     [exec] and you are welcome to redistribute it under certain conditions.

     [exec] Type 'sablecc -license' to view
     [exec] the complete copyright notice and license.


     [exec]  -- Generating parser for test0.grammar in ..../work/sablecc/test0/src
     [exec] Adding productions and alternative of section AST.
     [exec] Verifying identifiers.
     [exec] Verifying ast identifiers.
     [exec] Adding empty productions and empty alternative transformation if necessary.
     [exec] Adding productions and alternative transformation if necessary.
     [exec] computing alternative symbol table identifiers.
     [exec] Verifying production transform identifiers.
     [exec] Verifying ast alternatives transform identifiers.
     [exec] Generating token classes.
     [exec] Generating production classes.
     [exec] Generating alternative classes.
     [exec] Generating analysis classes.
     [exec] Generating utility classes.
     [exec] Generating the lexer.
     [exec]  State: INITIAL
     [exec]  - Constructing NFA.
     [exec] ...........
     [exec]  - Constructing DFA.
     [exec] ....................
     [exec] ......
     [exec]  - resolving ACCEPT states.
     [exec] Generating the parser.
     [exec] ......
     [exec] ......
     [exec] ......
     [exec] ..
     [exec] ......

BUILD SUCCESSFUL
Total time: 3 seconds

実行後、以下のparserクラス群が生成されていることを確認してください。

--------------------------------------------------
  src/test0/node          構文木のノード記述クラス
  src/test0/lexer         字句解析器クラス
  src/test0/parser        構文解析器クラス
  src/test0/analysis      構文木の探索処理用クラス
--------------------------------------------------


5.4.2 parserクラス群全体のコンパイル

次に、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
--------------------------------------------------


5.4.3 jarアーカイブの生成

更に、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アーカイブが生成されていることを確認してください。


5.5 実行テスト

いよいよ、構文解析木を表示させるための実行テストを行ってみます。
実行時には、 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)

ここまで正常にビルドならびに実行テストが行えたならば、演習に必要な環境は正しくセットアップされています。おめでとうございます!


5.6 javadocドキュメントセットの生成(オプション)

オプションで、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.