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