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
© Copyright 2024 ExpyDoc