PowerPoint プレゼンテーション

XMLによるJavaプログラム解析情報の
データベース化
井上研究室
山中祐介
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
背景
我々の研究室で開発しているJavaプログラム解析フレ
ームワークでは,解析情報はメモリ上に保持される
問題点
解析情報がアプリケーション独自の形式であるため,他
のアプリケーションとの情報共有が難しい
実行のたびにソースコードを再解析しなければならないた
め効率が悪い
1
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
目的
プログラム解析情報(意味解析木)のXMLデータ
ベース化
データベース化による利点
解析情報の二次利用
解析コストの削減
XMLを用いる利点
解析情報をXMLで構造化できる
XML文書を扱うための様々なアプリケーションが提供さ
れている
2
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
XML
XML(eXtensible Markup Language)の特徴
構文の容易性
タグ定義の自由性
DOM: XML文書を扱う共通API
XSLT: XML文書の変換ルール
XMLデータベースの利点
DTDによるデータの一貫性の保証
XML文書を容易に扱うことのできるDOM/XSLTの存在
3
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
意味解析木のXMLデータベース化
(1/2)
意味解析木
構文解析木に意味情報を加えたもの
変数/メソッド/型の宣言と参照の関係を保持
XMLタグ定義の方針
意味解析木の構造をタグ名で表現
プログラム情報や宣言,参照関係をタグの属性が保持
タグの種類は必要最小限にして構文を単純化
タグの例:<タグ名 属性= ”inf”>
4
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
意味解析木のXMLデータベース化
(2/2)
タグ名の例
<Method text=“sample” id=“189b”>
<type text="void" ref="4"/>
Method
: メソッド宣言
<Block>
Variable
<Variable text="a" id="18a9">
1: void
sample(): { 変数宣言
2: type
int a = 1; : 型参照 <type text="int" ref="7"/>
<Literal text="1"/>
3: 属性の例
int b = a;
</Variable>
4: }
<Variable text=“b" id="18ab">
text : プログラムの内容(変数名や演算子など)
<type text="int" ref="7"/>
id : クラスや変数などのID
<variable text=“a“ ref="18a9"/>
ref : ID参照
</Variable>
</Block>
</Method>
5
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
XMLデータベースの実現
意味解析木-XML変換ライブラリ
Javaプログラム解析フレームワークが扱う意味解析木 ,
およびそのXML記述 を相互変換する
解析情報のXML化による応用アプリケーション
XMLからソースプログラムに変換
XMLからHTMLに変換
XML編集
変数名の置換
6
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
Javaプログラム解析フレームワーク
ソースプログラム
意味解析木
ユーザ
Java
class Sam{
解析ライブラリ
GUI
}
意味解析木-XML
変換ライブラリ
XML文書
XML
<?xml…>
<sample>
</sample>
7
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
意味解析木-XML変換ライブラリ
開発言語:C++(libxml使用),約4000行
解析手順
意味解析木⇒XML
意味解析木をたどり各構文木要素に対応するタグを出力
XML⇒意味解析木
XML文書を解析してDOMツリーを構築
DOMツリーをたどり各タグに対応する構文木要素を作成
8
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
XMLデータベースの検証
ファイルサイズ
対象:JDK1.3付属クラスライブラリ
ソースプログラム
25MB
XMLデータベース
62MB
解析時間(意味解析木構築まで)
対象:JDK1.3付属クラスライブラリ
ソースプログラム
XMLデータベース
37秒
24秒
9
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
応用アプリケーション
ソースプログラム
意味解析木
ユーザ
Java
class Sam{
解析ライブラリ
GUI
}
ソース変換
プログラム
意味解析木-XML
変換ライブラリ
XML文書
HTML文書
XML
XML編集プログラム <?xml…>
<sample>
(変数名置換)
</sample>
ブラウザ
HTML
<html>
<body>
HTML変換
プログラム
</body>
</html>
10
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
Sam5.html
使用例(HTML変換)
例:Sam5.xml(一部抜粋)
例:Sam5.java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Java SYSTEM "java.dtd">
class Sam5 {
public static void main(String <Java>
args[]){
<CompilationUnit>
<ClassType modifiers="" text="Sam5" id="0x12">
int a = 1;
<Method modifiers="public static" text="main" id="0x189b">
java/lang/System.html
<type text="void" ref="0x4"/>
int b;
<Variable modifiers="" text="args" id="0x18a4">
<type text="java.lang.String[]" text_="String[]" ref="0x20"/>
b = a + 1;
</Variable>
System.out.println(a + "," + b);<Block>
<Variable modifiers="" text="b" id="0x18ad">
<type text="int" ref="0x7"/>
}
</Variable>
<Operation text="=">
}
<type text="int" ref="0x7"/>
<variable text="b" ref="0x18ad"/>
<Operation text="+">
<type text="int" ref="0x7"/>
<variable text="a" ref="0x18a9"/>
<Literal text="1"/>
</Operation>
</Operation>
</Block>
</Method>
</ClassType>
</CompilationUnit>
</Java>
11
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
まとめと今後の課題
まとめ
XMLによるJavaプログラム解析情報のデータベース化
XML変換プログラムによる二次利用
解析効率の向上
今後の課題
意味情報以外の解析情報のデータベース化
依存関係
エイリアス関係
12
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University