Jflat
Jflatは、JAVAプログラミング言語のサブセットのコンパイラです。
サブセットといっても、
セルフコンパイルが可能な程度まで機能を実装しています。
JflatはJsharpにアップグレードしました。
Jflatにはバグや未実装の機能が残っていますが、更新しません。
JAVA - Jflat = ?
Jflatが実装していない主な機能はつぎのとおりです。
これらの機能はJsharpで実装しています。
- 入れ子クラス
- クラスやメソッド内でクラスを定義することはできません。
- 浮動点小数型
- float,doubleをサポートしていません。
- String連結演算の組み込みサポート
- +演算子による文字列連結演算を組み込み演算子としていません。
かわりに、ライブラリ関数として実現できます。
- ソースファイルの分割
- 一回の起動でひとつのソースファイルのみコンパイルできます。
javacのように複数のソースファイルに記述されたクラスを自動的に
コンパイルするようなことはおこないません。ただし、javacとは異
なり、publicであるクラスも同一のファイルに記述できますので、相
互に依存しあうクラスをコンパイルすることは可能です。
Jflat - JAVA = ?
Jflatが拡張した主な機能はつぎのとおりです。
- グローバル変数・関数
- C言語と同様にグローバル変数・関数を定義することができます。
- プリミティブ演算子のオーバーロード・再定義
- "+"や"<<"といったプリミティブ演算子とおなじ名前の関数を定義
できます。String連結演算をおこなう"+"演算子もこれにより実現し
ています。
- 任意の名前を中置二項演算子として使用可能
- Standard MLのように、infix文で任意の名前を中置二項演算子とし
て使うことができます。
- importlibによるライブラリの取り込み
- importlib文でクラスを指定すると、そのクラスのpublic staticな
フィールドやメソッドをグローバル変数・関数と同様に使用すること
ができます。
これらの機能を利用するとつぎのようなコードを記述できます。
このコード例は、集合に関する演算を定義しています。
setoperator.jb
package test;
import java.lang.*;
import java.util.*;
bool in(Object o,Collection container){
return container.contains(o);
}
Collection +(Collection container,Object o){
Vector newcol = new Vector(container);
newcol.add(o);
return newcol;
}
Collection +(Collection container,Collection right){
Vector newcol = new Vector(container);
newcol.addAll(right);
return newcol;
}
|
setoperatortest.jb
package test;
import java.lang.*;
import java.util.*;
importlib jp.ac.jaist.kiyoshiy.jflat.JbLib;
importlib test.setoperator;
infix 0 in;
void main(string[] args){
Collection c = new Vector();
Collection d = new LinkedList();
Object o = new Object();
c += (Object)o;
if(o in c){
println("o is in c.");
}else{
println("o is not in c.");
}
d += c;
if(o in d){
println("o is in d.");
}else{
println("o is not in d.");
}
}
|
Download
- ソース & ドキュメント
-
Jflat-1.0.tar.gz
(ドキュメントのLaTexソース)
- Jflatで記述されたJflatコンパイラのソース
-
jbc.jb
そのほか、コンパイルにはJavaCC、実行にはJavaClassが必要です。
以下のURLからダウンロードできますが、学校のWSであれば、PATHに
~kiyoshiy/Package/JavaCC/bin
を加え、CLASSPATHに
~kiyoshiy/Package/JavaClass
を加えればコンパイル・実行が可能です。
- JavaCC
- http://www.metamata.com/JavaCC/
- JavaClass
- http://www.inf.fu-berlin.de/~dahm/JavaClass/
make
以下のコマンドにより、JflatコンパイラとJbLibライブラリをコンパイル
します。
gmake
./jbc jp/ac/jaist/kiyoshiy/jflat/JbLib.jb
test
testディレクトリ以下にいくつかテストコードを置いてありますので、コ
ンパイルできることを確認してください。
./jbc test/nametest.jb
java test.nametest
|