Top
Photo Drawings Software Writing Reading Memo Study Profile Bookmark 
Amethyst DumLambda PetitLambda Yamanba JSharp JFlat OOPS yash KumonoIto ML Toys 

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