統合開発環境のための プログラミング言語拡張 フレームワーク

Slides:



Advertisements
Similar presentations
Trac と Eclipse の 便利な機能. プロジェクト管理システム: Trac 0. はじめに バージョン管理システム: Subversion 統合開発環境: Eclipse ・ Wiki による情報 管理 ・進捗状況の管理 ・プログラムの作 成 ・リポジトリに データを集める.
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
JPAを利用した RESTful Webサービスの開発
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
プログラミング基礎I(再) 山元進.
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
WebサービスII (第10回) 2007年11月28日 植田龍男.
Javaのための暗黙的に型定義される構造体
プログラミング基礎I(再) 山元進.
Java I 第2回 (9/22).
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
ソードコードの編集に基づいた コードクローンの分類とその分析システム
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
ソフトウェア制作論 平成30年10月3日.
Javaプログラムの変更を支援する 影響波及解析システム
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
Java8について 2014/03/07.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
Java における 先進的リフレクション技術
コンパイラ 2011年10月20日
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Annotation EJB 3.0 コース 第3回 2006年8月4日.
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラム理解のための 付加注釈 DocumentTag の提案
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

統合開発環境のための プログラミング言語拡張 フレームワーク 理学部 情報科学科 05_22951 松本 久志 指導教員 千葉滋

言語拡張システムの必要性 言語拡張を容易にするためのシステム コンパイラのためのシステム ドメイン固有言語の作成 既存言語の補填 例 : O/Rマッピング 既存言語の補填 例 : Open class コンパイラのためのシステム Polyglot [Myers ら ‘2003] JastAdd [Hedin ら ‘2003] @Refines(A.class) class B { void hoge() { .. } }

統合開発環境のための 言語拡張システム 統合開発環境への対応 従来技術 Polyglot, JastAdd など 現在ではコンパイラの 提供だけでは不十分 従来技術 Polyglot, JastAdd など 編集時の支援がない 対話的なエラー報告 Eclipseでは編集時に専用の処理

提案 : 編集時のエラー出力を操作する メタオブジェクトプロトコル(MOP) 言語拡張をメタオブジェクトで記述 編集時とコンパイル時の2つのMOP 編集時メタオブジェクト 編集時に出力するエラーを制御 コンパイル時メタオブジェクト ソースコード変換で言語拡張を実装

編集時のMOPの動作 エラーの出力を操作 ソース変換は行わない 必要のないエラーを除去 新たに必要なエラーを追加 厳密なエラー解析はコンパイル時に行えば良い @Refines(A.class) class B { void hoge() { .. } } class A {} @Refines(A.class) class B { void hoge() { .. } } class A {}

コンパイル時のMOPの動作 拡張言語のソースコードを変換 変換後既存のコンパイラでコンパイル 文字列としての変換 ASTを利用した変換 @Refines(A.class) class B { void hoge() { .. } } class A {} class A { void hoge() { .. } }

実装 EclipseのJava開発環境を拡張可能に 言語拡張者の作業 JDTプラグインを拡張 編集時: finalizeProblems メタオブジェクトのメソッドを上書き 編集時: finalizeProblems 引数:ソースファイルの解析結果 標準JDTが作成、発見したエラー情報を含む コンパイル時: convertSources 抽象構文木を取り出し変形 エラー出力の操作 ソースの変換

適用例 @Refinesによるopen classの機構 言語拡張に由来した エラーの除去 拡張された言語の コンパイル及び 実行が可能 エラー操作は18行 ソース変換は32行 の記述で実現

記述例 @Refinesによるopen classの機構 コンパイル時のソース変換 編集時のエラー出力の操作 @Override public void convertSources() { for(CTUnit unit : CTMOP.getUnits()) { /* ビジターパターンを用いて @Refinesアノテーションを検索 */ unit.getCompilationUnit().accept(new ASTVisitor() { public boolean visit(SingleMemberAnnotation node) { if(node.getTypeName().toString().equals(“Refines”) && node.getParent() instanceof TypeDeclaration) { : // フィールド及びメソッドのコピー } @Override public void finalizeProblems(CompilationUnitDeclaration u) { List<CategorizedProblem> newList = new LinkedList<CategorizedProblem>(); CompilationResult result = u.compilationResult(); for(CategorizedProblem problem : result.problems){ if(problem.isError()) { if(problem.getCategoryID() == CategorizedProblem.CAT_TYPE) { // @Refinesアノテーションに関するエラーは無視 if(problem.getArguments()[0].equals(“Refines”)) continue; } : // 他のエラー判定条件 newList.add(problem); unit.compilationResult().problems = newList.toArray(new CategorizedProblem[newList.size()]);

関連研究 拡張可能コンパイラ 編集時メタオブジェクト Polyglot [Myers ら ‘2003] 拡張しやすいJavaフロントエンドフレームワーク JastAdd [Hedin ら ‘2003] 属性文法による意味解析 差分のみの記述で構文拡張可能 編集時メタオブジェクト “Expressive programs through presentation extension” [Eisenberg ら ‘2007] 編集時とコンパイル時のMOPを提供 編集時のソースコードの表示を制御

まとめと今後の課題 統合開発環境に対応した 言語拡張フレームワークの提案 今後の課題 コンパイル時及び編集時のMOPを提供 統合開発環境に対応した 言語拡張フレームワークの提案 コンパイル時及び編集時のMOPを提供 編集時にエラー出力の操作を行う コンパイル時にソース変換を行う JDTを拡張して実装 今後の課題 ASTの操作の簡易化 エラーの判別方法の確立