BLOGTIMES
2010/04/30

JJmltはjava5に対応していないようだ

  java 
このエントリーをはてなブックマークに追加

実験のためにちょっとした静的解析ツールを書く必要があって、パーサーをごりごりいじり倒すのも面倒なので、何か既存のツールを使ってあれこれ出来ないかと思って、後輩に聞いてみたら、愛媛大で開発されているJJmltツールが使えそうだったのでちょっと試してみました。

このツールはソースコードからJavaMLというJavaのソースコードのXML表現を生成してくれます。これでソースコードを一括して前処理してしまえば、後は使いなれたXMLパーサーとかXSLTを使うことができるようになるのでちょっとは楽できるかなと思っていたんですが、結論から述べるとJava5に対応していないみたいでした。この部分、連休中に拡張してしまおうかなぁ。

簡単なサンプル

Bar.java

public class Bar { public static void main(String[] args) { for (int a = 0; a < 10; a++) { System.out.println(a); } } }
F:\>java -jar JJmlt.jar Bar.java JJmlt (A Java - JavaML Translator based on JavaCC) Ver.2.2 Copyright (c) 2003 - 2006 Aman Lab., Ehime Univ. <aman@computer.org> (JavaCC - Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.) JJmlt: Reading from file Bar.java . . . <?xml version="1.0" encoding="UTF-8"?> <java-source-program> <java-class-file name="Bar.java"> <class name="Bar" visibility="public"> <superclass name="java.lang.Object"/> <method name="main" visibility="public" static="true" id="Bar:mth-1"> <type name="void" primitive="true"/> <formal-arguments> <formal-argument name="args" id="Bar:frm-1"> <type name="String" dimensions="1"/> </formal-argument> </formal-arguments> <block> <loop kind="for"> <init> <local-variable name="a" id="Bar:var-1"> <type name="int" primitive="true"/> <literal-number kind="integer" value="0"/> </local-variable> </init> <test> <binary-expr op="&lt;"> <var-ref name="a" idref="Bar:var-1"/> <literal-number kind="integer" value="10"/> </binary-expr> </test> <update> <unary-expr op="++" post="true"> <var-ref name="a" idref="Bar:var-1"/> </unary-expr> </update> <block> <send message="println"> <target> <field-access field="out"> <var-ref name="System"/> </field-access> </target> <arguments> <var-ref name="a" idref="Bar:var-1"/> </arguments> </send> </block> </loop> </block> </method> </class> </java-class-file> </java-source-program> JJmlt: Java program translated successfully.

Java5のソースを食わせた場合

Foo.java

import java.util.ArrayList; import java.util.List; public class Foo { enum TYPE {AAA, BBB, CCC}; public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Foo"); list.add("Bar"); list.add("Baz"); for (String str : list) { System.out.println(str + " "); } for (TYPE type : TYPE.values()) { System.out.println(type.name() + " "); } } }
F:\>java -jar JJmlt.jar Foo.java JJmlt (A Java - JavaML Translator based on JavaCC) Ver.2.2 Copyright (c) 2003 - 2006 Aman Lab., Ehime Univ. <aman@computer.org> (JavaCC - Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.) JJmlt: Reading from file Foo.java . . . <?xml version="1.0" encoding="UTF-8"?> <java-source-program> <java-class-file name="Foo.java"> <import module="java.util.ArrayList"/> <import module="java.util.List"/> <class name="Foo" visibility="public"> <superclass name="java.lang.Object"/> <field name="TYPE"> <type name="enum"/> </field> JJmlt: Encountered errors during parse. Encountered "{" at line 5, column 19. Was expecting one of: "[" ... ";" ... "," ... "=" ... "(" ...

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3535
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン