- blogs:
- cles::blog
« OTTIMO KITCHEN :: Over Drive »
2010/04/30

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

実験のためにちょっとした静的解析ツールを書く必要があって、パーサーをごりごりいじり倒すのも面倒なので、何か既存のツールを使ってあれこれ出来ないかと思って、後輩に聞いてみたら、愛媛大で開発されている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="<">
<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 を使ってログインすることができます。
« OTTIMO KITCHEN :: Over Drive »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(111994)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110624)
3 . 年次の人間ドックへ(110254)
4 . 2023 年分の確定申告完了!(1つめ)(109803)
5 . 三菱鉛筆がラミーを買収(109700)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110624)
3 . 年次の人間ドックへ(110254)
4 . 2023 年分の確定申告完了!(1つめ)(109803)
5 . 三菱鉛筆がラミーを買収(109700)
cles::blogについて
Referrers