s式でJavaが書ける処理系

s式でJavaが書ける処理系をつくってみました。
http://github.com/mas454/experiment/blob/master/jts.scm

(class Test (public) 
 (def (main args) ((public static void) |String[]|)
      (System.out.println "Hello Java World")))

これを例えばTest.jtsという名前で保存して、
gosh jts.scm Test.jts Test.java
のようにgaucheで実行すると、Test.java

public class Test{
 public static void main(String[] args) {
  System.out.println("Hello Java World");
 }
}

が出力されます。実際には字下げとかはされません。

ちなみにマクロが使えます。例えば、mainメソッドはよく定義するので、マクロ
を使って簡単に定義できるようにすると、

(macro (def_main . body)
  `(def (main args) ((public static void) |String[]|)
	,@body))

(class Test (public)
       (def_main
	   (System.out.println "Hello Java world")))

のような感じになります。マクロは、gaucheで書けます。

(macro (test . body)
    (list (list test 〜 )))

本当にこんなの使えるのかどうか疑問だったのですが、実際に使ってみないと
わからないので、試しに書いてみました。


schemeJavaapiを呼び出せるような処理系は、いくつかあるのですが、
なんとなく使いづらくて、特に、guiが書きにくいです。


それで、自分でguiが書きやすいような、schemeの処理系が作れないかどうか
考えていたのですが、作れたとしても実用的になるまであまりにも、時間が
かかりすぎるような気がしたので妥協案として、この処理系を書いてみました。
これで、guiが書きやすいかどうかはまだ分かりませんが。


それから、s式でJavaを書くために作った処理系ですが、これのマクロを使ってJava以外のCとかC++などの別言語を出力できるようにすることもできます。
例えば、classとdefはマクロで定義しています。
たぶん、そのうちこの処理系のマクロのくわしい説明を書きます。

処理系のほうでは、最低限の機能だけ実装しています。